diff options
author | Caolán McNamara <caolanm@redhat.com> | 2019-09-05 12:22:38 +0100 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2019-09-12 20:28:14 +0200 |
commit | 8c66efa030e98cfdf5da20be368566d64e43c5d1 (patch) | |
tree | 88c9fb335349fd1b7b285d46108e5d41a3c9aac4 /dbaccess/source/ui/misc | |
parent | 8150219824a1d08c4a22fd8bb7cc63fe2aa88074 (diff) |
weld OCopyTableWizard cluster
Change-Id: I52547defb0e7ba328ec20d41a955e545556ffd16
note: get the toplevel parent by getting it from the XInteractionHandler
Reviewed-on: https://gerrit.libreoffice.org/78751
Tested-by: Jenkins
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
Tested-by: Caolán McNamara <caolanm@redhat.com>
Diffstat (limited to 'dbaccess/source/ui/misc')
-rw-r--r-- | dbaccess/source/ui/misc/DExport.cxx | 18 | ||||
-rw-r--r-- | dbaccess/source/ui/misc/TableCopyHelper.cxx | 5 | ||||
-rw-r--r-- | dbaccess/source/ui/misc/WCPage.cxx | 160 | ||||
-rw-r--r-- | dbaccess/source/ui/misc/WColumnSelect.cxx | 241 | ||||
-rw-r--r-- | dbaccess/source/ui/misc/WCopyTable.cxx | 202 | ||||
-rw-r--r-- | dbaccess/source/ui/misc/WExtendPages.cxx | 9 | ||||
-rw-r--r-- | dbaccess/source/ui/misc/WNameMatch.cxx | 380 | ||||
-rw-r--r-- | dbaccess/source/ui/misc/WTypeSelect.cxx | 286 |
8 files changed, 559 insertions, 742 deletions
diff --git a/dbaccess/source/ui/misc/DExport.cxx b/dbaccess/source/ui/misc/DExport.cxx index 3bc250adb718..78117ef9f348 100644 --- a/dbaccess/source/ui/misc/DExport.cxx +++ b/dbaccess/source/ui/misc/DExport.cxx @@ -677,7 +677,7 @@ bool ODatabaseExport::executeWizard(const OUString& _rTableName, const Any& _aTe { bool bHaveDefaultTable = !m_sDefaultTableName.isEmpty(); OUString sTableName( bHaveDefaultTable ? m_sDefaultTableName : _rTableName ); - ScopedVclPtrInstance<OCopyTableWizard> aWizard( + OCopyTableWizard aWizard( nullptr, sTableName, bHaveDefaultTable ? CopyTableOperation::AppendData : CopyTableOperation::CopyDefinitionAndData, @@ -693,14 +693,14 @@ bool ODatabaseExport::executeWizard(const OUString& _rTableName, const Any& _aTe bool bError = false; try { - if (aWizard->Execute()) + if (aWizard.run()) { - switch(aWizard->getOperation()) + switch(aWizard.getOperation()) { case CopyTableOperation::CopyDefinitionAndData: case CopyTableOperation::AppendData: { - m_xTable = aWizard->createTable(); + m_xTable = aWizard.createTable(); bError = !m_xTable.is(); if(m_xTable.is()) { @@ -708,10 +708,10 @@ bool ODatabaseExport::executeWizard(const OUString& _rTableName, const Any& _aTe if(_aTextColor.hasValue()) m_xTable->setPropertyValue(PROPERTY_TEXTCOLOR,_aTextColor); } - m_bIsAutoIncrement = aWizard->shouldCreatePrimaryKey(); - m_vColumnPositions = aWizard->GetColumnPositions(); - m_vColumnTypes = aWizard->GetColumnTypes(); - m_bAppendFirstLine = !aWizard->UseHeaderLine(); + m_bIsAutoIncrement = aWizard.shouldCreatePrimaryKey(); + m_vColumnPositions = aWizard.GetColumnPositions(); + m_vColumnTypes = aWizard.GetColumnTypes(); + m_bAppendFirstLine = !aWizard.UseHeaderLine(); } break; default: @@ -726,7 +726,7 @@ bool ODatabaseExport::executeWizard(const OUString& _rTableName, const Any& _aTe } catch( const SQLException&) { - ::dbtools::showError( ::dbtools::SQLExceptionInfo( ::cppu::getCaughtException() ), VCLUnoHelper::GetInterface(aWizard.get()), m_xContext ); + ::dbtools::showError( ::dbtools::SQLExceptionInfo( ::cppu::getCaughtException() ), aWizard.getDialog()->GetXWindow(), m_xContext ); bError = true; } catch( const Exception& ) diff --git a/dbaccess/source/ui/misc/TableCopyHelper.cxx b/dbaccess/source/ui/misc/TableCopyHelper.cxx index 6b7015d16344..135632e0c698 100644 --- a/dbaccess/source/ui/misc/TableCopyHelper.cxx +++ b/dbaccess/source/ui/misc/TableCopyHelper.cxx @@ -26,6 +26,7 @@ #include <WCopyTable.hxx> #include <dbaccess/genericcontroller.hxx> #include <WCPage.hxx> +#include <com/sun/star/task/InteractionHandler.hpp> #include <com/sun/star/task/XInteractionHandler.hpp> #include <com/sun/star/sdb/XSingleSelectQueryComposer.hpp> #include <com/sun/star/sdb/application/CopyTableOperation.hpp> @@ -114,7 +115,9 @@ void OTableCopyHelper::insertTable( const OUString& i_rSourceDataSource, const R Reference< XPropertySet > xDest( xFactory->createDataAccessDescriptor(), UNO_SET_THROW ); xDest->setPropertyValue( PROPERTY_ACTIVE_CONNECTION, makeAny( i_rDestConnection ) ); - Reference< XCopyTableWizard > xWizard( CopyTableWizard::create( aContext, xSource, xDest ), UNO_SET_THROW ); + auto xInteractionHandler = InteractionHandler::createWithParent(aContext, VCLUnoHelper::GetInterface(m_pController->getView())); + + Reference<XCopyTableWizard> xWizard(CopyTableWizard::createWithInteractionHandler(aContext, xSource, xDest, xInteractionHandler), UNO_SET_THROW); OUString sTableNameForAppend( GetTableNameForAppend() ); xWizard->setDestinationTableName( GetTableNameForAppend() ); diff --git a/dbaccess/source/ui/misc/WCPage.cxx b/dbaccess/source/ui/misc/WCPage.cxx index 11717f2d04a5..ae07cb947fb8 100644 --- a/dbaccess/source/ui/misc/WCPage.cxx +++ b/dbaccess/source/ui/misc/WCPage.cxx @@ -48,48 +48,47 @@ using namespace ::com::sun::star::sdbcx; namespace CopyTableOperation = css::sdb::application::CopyTableOperation; -OCopyTable::OCopyTable(vcl::Window * pParent) - : OWizardPage(pParent, "CopyTablePage", "dbaccess/ui/copytablepage.ui") - , m_nOldOperation(0) +OCopyTable::OCopyTable(OCopyTableWizard* pWizard, TabPageParent pParent) + : OWizardPage(pWizard, pParent, "dbaccess/ui/copytablepage.ui", "CopyTablePage") , m_bPKeyAllowed(false) , m_bUseHeaderAllowed(true) + , m_nOldOperation(0) + , m_xEdTableName(m_xBuilder->weld_entry("name")) + , m_xRB_DefData(m_xBuilder->weld_radio_button("defdata")) + , m_xRB_Def(m_xBuilder->weld_radio_button("def")) + , m_xRB_View(m_xBuilder->weld_radio_button("view")) + , m_xRB_AppendData(m_xBuilder->weld_radio_button("data")) + , m_xCB_UseHeaderLine(m_xBuilder->weld_check_button("firstline")) + , m_xCB_PrimaryColumn(m_xBuilder->weld_check_button("primarykey")) + , m_xFT_KeyName(m_xBuilder->weld_label("keynamelabel")) + , m_xEdKeyName(m_xBuilder->weld_entry("keyname")) { - get(m_pEdTableName, "name"); - get(m_pRB_DefData, "defdata"); - get(m_pRB_Def, "def"); - get(m_pRB_View, "view"); - get(m_pRB_AppendData, "data"); - get(m_pCB_UseHeaderLine, "firstline"); - get(m_pCB_PrimaryColumn, "primarykey"); - get(m_pFT_KeyName, "keynamelabel"); - get(m_pEdKeyName, "keyname"); - - m_pEdTableName->SetMaxTextLen(EDIT_NOLIMIT); + m_xEdTableName->set_max_length(EDIT_NOLIMIT); if ( m_pParent->m_xDestConnection.is() ) { - if ( !m_pParent->supportsViews() ) - m_pRB_View->Disable(); + if (!m_pParent->supportsViews()) + m_xRB_View->set_sensitive(false); - m_pCB_UseHeaderLine->Check(); + m_xCB_UseHeaderLine->set_active(true); m_bPKeyAllowed = m_pParent->supportsPrimaryKey(); - m_pCB_PrimaryColumn->Enable(m_bPKeyAllowed); + m_xCB_PrimaryColumn->set_sensitive(m_bPKeyAllowed); - m_pRB_AppendData->SetClickHdl( LINK( this, OCopyTable, AppendDataClickHdl ) ); + m_xRB_AppendData->connect_clicked( LINK( this, OCopyTable, AppendDataClickHdl ) ); - m_pRB_DefData->SetClickHdl( LINK( this, OCopyTable, RadioChangeHdl ) ); - m_pRB_Def->SetClickHdl( LINK( this, OCopyTable, RadioChangeHdl ) ); - m_pRB_View->SetClickHdl( LINK( this, OCopyTable, RadioChangeHdl ) ); + m_xRB_DefData->connect_clicked( LINK( this, OCopyTable, RadioChangeHdl ) ); + m_xRB_Def->connect_clicked( LINK( this, OCopyTable, RadioChangeHdl ) ); + m_xRB_View->connect_clicked( LINK( this, OCopyTable, RadioChangeHdl ) ); - m_pCB_PrimaryColumn->SetClickHdl(LINK( this, OCopyTable, KeyClickHdl ) ); + m_xCB_PrimaryColumn->connect_clicked(LINK( this, OCopyTable, KeyClickHdl ) ); - m_pFT_KeyName->Enable(false); - m_pEdKeyName->Enable(false); - m_pEdKeyName->SetText(m_pParent->createUniqueName("ID")); + m_xFT_KeyName->set_sensitive(false); + m_xEdKeyName->set_sensitive(false); + m_xEdKeyName->set_text(m_pParent->createUniqueName("ID")); const sal_Int32 nMaxLen = m_pParent->getMaxColumnNameLength(); - m_pEdKeyName->SetMaxTextLen(nMaxLen ? nMaxLen : EDIT_NOLIMIT); + m_xEdKeyName->set_max_length(nMaxLen ? nMaxLen : EDIT_NOLIMIT); } SetText(DBA_RES(STR_COPYTABLE_TITLE_COPY)); @@ -97,24 +96,9 @@ OCopyTable::OCopyTable(vcl::Window * pParent) OCopyTable::~OCopyTable() { - disposeOnce(); -} - -void OCopyTable::dispose() -{ - m_pEdTableName.clear(); - m_pRB_DefData.clear(); - m_pRB_Def.clear(); - m_pRB_View.clear(); - m_pRB_AppendData.clear(); - m_pCB_UseHeaderLine.clear(); - m_pCB_PrimaryColumn.clear(); - m_pFT_KeyName.clear(); - m_pEdKeyName.clear(); - OWizardPage::dispose(); } -IMPL_LINK_NOARG( OCopyTable, AppendDataClickHdl, Button*, void ) +IMPL_LINK_NOARG( OCopyTable, AppendDataClickHdl, weld::Button&, void ) { SetAppendDataRadio(); } @@ -122,20 +106,20 @@ IMPL_LINK_NOARG( OCopyTable, AppendDataClickHdl, Button*, void ) void OCopyTable::SetAppendDataRadio() { m_pParent->EnableNextButton(true); - m_pFT_KeyName->Enable(false); - m_pCB_PrimaryColumn->Enable(false); - m_pEdKeyName->Enable(false); + m_xFT_KeyName->set_sensitive(false); + m_xCB_PrimaryColumn->set_sensitive(false); + m_xEdKeyName->set_sensitive(false); m_pParent->setOperation(CopyTableOperation::AppendData); } -IMPL_LINK( OCopyTable, RadioChangeHdl, Button*, pButton, void ) +IMPL_LINK(OCopyTable, RadioChangeHdl, weld::Button&, rButton, void) { - m_pParent->EnableNextButton(pButton != m_pRB_View); - bool bKey = m_bPKeyAllowed && pButton != m_pRB_View; - m_pFT_KeyName->Enable(bKey && m_pCB_PrimaryColumn->IsChecked()); - m_pEdKeyName->Enable(bKey && m_pCB_PrimaryColumn->IsChecked()); - m_pCB_PrimaryColumn->Enable(bKey); - m_pCB_UseHeaderLine->Enable(m_bUseHeaderAllowed && IsOptionDefData()); + m_pParent->EnableNextButton(&rButton != m_xRB_View.get()); + bool bKey = m_bPKeyAllowed && &rButton != m_xRB_View.get(); + m_xFT_KeyName->set_sensitive(bKey && m_xCB_PrimaryColumn->get_active()); + m_xEdKeyName->set_sensitive(bKey && m_xCB_PrimaryColumn->get_active()); + m_xCB_PrimaryColumn->set_sensitive(bKey); + m_xCB_UseHeaderLine->set_sensitive(m_bUseHeaderAllowed && IsOptionDefData()); // set type what to do if( IsOptionDefData() ) @@ -146,17 +130,17 @@ IMPL_LINK( OCopyTable, RadioChangeHdl, Button*, pButton, void ) m_pParent->setOperation( CopyTableOperation::CreateAsView ); } -IMPL_LINK_NOARG( OCopyTable, KeyClickHdl, Button*, void ) +IMPL_LINK_NOARG( OCopyTable, KeyClickHdl, weld::Button&, void ) { - m_pEdKeyName->Enable(m_pCB_PrimaryColumn->IsChecked()); - m_pFT_KeyName->Enable(m_pCB_PrimaryColumn->IsChecked()); + m_xEdKeyName->set_sensitive(m_xCB_PrimaryColumn->get_active()); + m_xFT_KeyName->set_sensitive(m_xCB_PrimaryColumn->get_active()); } bool OCopyTable::LeavePage() { - m_pParent->m_bCreatePrimaryKeyColumn = m_bPKeyAllowed && m_pCB_PrimaryColumn->IsEnabled() && m_pCB_PrimaryColumn->IsChecked(); - m_pParent->m_aKeyName = m_pParent->m_bCreatePrimaryKeyColumn ? m_pEdKeyName->GetText() : OUString(); - m_pParent->setUseHeaderLine( m_pCB_UseHeaderLine->IsChecked() ); + m_pParent->m_bCreatePrimaryKeyColumn = m_bPKeyAllowed && m_xCB_PrimaryColumn->get_sensitive() && m_xCB_PrimaryColumn->get_active(); + m_pParent->m_aKeyName = m_pParent->m_bCreatePrimaryKeyColumn ? m_xEdKeyName->get_text() : OUString(); + m_pParent->setUseHeaderLine( m_xCB_UseHeaderLine->get_active() ); // first check if the table already exists in the database if( m_pParent->getOperation() != CopyTableOperation::AppendData ) @@ -164,7 +148,7 @@ bool OCopyTable::LeavePage() m_pParent->clearDestColumns(); DynamicTableOrQueryNameCheck aNameCheck( m_pParent->m_xDestConnection, CommandType::TABLE ); SQLExceptionInfo aErrorInfo; - if ( !aNameCheck.isNameValid( m_pEdTableName->GetText(), aErrorInfo ) ) + if ( !aNameCheck.isNameValid( m_xEdTableName->get_text(), aErrorInfo ) ) { aErrorInfo.append( SQLExceptionInfo::TYPE::SQLContext, DBA_RES( STR_SUGGEST_APPEND_TABLE_DATA ) ); m_pParent->showError(aErrorInfo.get()); @@ -178,7 +162,7 @@ bool OCopyTable::LeavePage() OUString sSchema; OUString sTable; ::dbtools::qualifiedNameComponents( xMeta, - m_pEdTableName->GetText(), + m_xEdTableName->get_text(), sCatalog, sSchema, sTable, @@ -199,7 +183,7 @@ bool OCopyTable::LeavePage() } } - if ( m_pEdTableName->IsValueChangedFromSaved() ) + if (m_xEdTableName->get_value_changed_from_saved()) { // table exists and name has changed if ( m_pParent->getOperation() == CopyTableOperation::AppendData ) { @@ -208,7 +192,7 @@ bool OCopyTable::LeavePage() } else if ( m_nOldOperation == CopyTableOperation::AppendData ) { - m_pEdTableName->SaveValue(); + m_xEdTableName->save_value(); return LeavePage(); } } @@ -220,8 +204,8 @@ bool OCopyTable::LeavePage() return false; } } - m_pParent->m_sName = m_pEdTableName->GetText(); - m_pEdTableName->SaveValue(); + m_pParent->m_sName = m_xEdTableName->get_text(); + m_xEdTableName->save_value(); if(m_pParent->m_sName.isEmpty()) { @@ -234,10 +218,10 @@ bool OCopyTable::LeavePage() void OCopyTable::ActivatePage() { - m_pParent->GetOKButton().Enable(); + m_pParent->GetOKButton().set_sensitive(true); m_nOldOperation = m_pParent->getOperation(); - m_pEdTableName->GrabFocus(); - m_pCB_UseHeaderLine->Check(m_pParent->UseHeaderLine()); + m_xEdTableName->grab_focus(); + m_xCB_UseHeaderLine->set_active(m_pParent->UseHeaderLine()); } OUString OCopyTable::GetTitle() const @@ -249,8 +233,8 @@ void OCopyTable::Reset() { m_bFirstTime = false; - m_pEdTableName->SetText( m_pParent->m_sName ); - m_pEdTableName->SaveValue(); + m_xEdTableName->set_text( m_pParent->m_sName ); + m_xEdTableName->save_value(); } bool OCopyTable::checkAppendData() @@ -259,9 +243,9 @@ bool OCopyTable::checkAppendData() Reference< XPropertySet > xTable; Reference< XTablesSupplier > xSup( m_pParent->m_xDestConnection, UNO_QUERY ); Reference<XNameAccess> xTables; - if(xSup.is()) + if (xSup.is()) xTables = xSup->getTables(); - if(xTables.is() && xTables->hasByName(m_pEdTableName->GetText())) + if (xTables.is() && xTables->hasByName(m_xEdTableName->get_text())) { const ODatabaseExport::TColumnVector& rSrcColumns = m_pParent->getSrcVector(); const sal_uInt32 nSrcSize = rSrcColumns.size(); @@ -269,7 +253,7 @@ bool OCopyTable::checkAppendData() m_pParent->m_vColumnTypes.resize( nSrcSize , COLUMN_POSITION_NOT_FOUND ); // set new destination - xTables->getByName( m_pEdTableName->GetText() ) >>= xTable; + xTables->getByName( m_xEdTableName->get_text() ) >>= xTable; ObjectCopySource aTableCopySource( m_pParent->m_xDestConnection, xTable ); m_pParent->loadData( aTableCopySource, m_pParent->m_vDestColumns, m_pParent->m_aDestVec ); const ODatabaseExport::TColumnVector& rDestColumns = m_pParent->getDestVector(); @@ -308,40 +292,40 @@ bool OCopyTable::checkAppendData() void OCopyTable::setCreatePrimaryKey( bool _bDoCreate, const OUString& _rSuggestedName ) { bool bCreatePK = m_bPKeyAllowed && _bDoCreate; - m_pCB_PrimaryColumn->Check( bCreatePK ); - m_pEdKeyName->SetText( _rSuggestedName ); + m_xCB_PrimaryColumn->set_active( bCreatePK ); + m_xEdKeyName->set_text( _rSuggestedName ); - m_pFT_KeyName->Enable( bCreatePK ); - m_pEdKeyName->Enable( bCreatePK ); + m_xFT_KeyName->set_sensitive( bCreatePK ); + m_xEdKeyName->set_sensitive( bCreatePK ); } void OCopyTable::setCreateStyleAction() { // reselect the last action before - switch(m_pParent->getOperation()) + switch (m_pParent->getOperation()) { case CopyTableOperation::CopyDefinitionAndData: - m_pRB_DefData->Check(); - RadioChangeHdl(m_pRB_DefData); + m_xRB_DefData->set_active(true); + RadioChangeHdl(*m_xRB_DefData); break; case CopyTableOperation::CopyDefinitionOnly: - m_pRB_Def->Check(); - RadioChangeHdl(m_pRB_Def); + m_xRB_Def->set_active(true); + RadioChangeHdl(*m_xRB_Def); break; case CopyTableOperation::AppendData: - m_pRB_AppendData->Check(); + m_xRB_AppendData->set_active(true); SetAppendDataRadio(); break; case CopyTableOperation::CreateAsView: - if ( m_pRB_View->IsEnabled() ) + if (m_xRB_View->get_sensitive()) { - m_pRB_View->Check(); - RadioChangeHdl(m_pRB_View); + m_xRB_View->set_active(true); + RadioChangeHdl(*m_xRB_View); } else { - m_pRB_DefData->Check(); - RadioChangeHdl(m_pRB_DefData); + m_xRB_DefData->set_active(true); + RadioChangeHdl(*m_xRB_DefData); } } } diff --git a/dbaccess/source/ui/misc/WColumnSelect.cxx b/dbaccess/source/ui/misc/WColumnSelect.cxx index 15eb6c66451d..89fd3a86bc41 100644 --- a/dbaccess/source/ui/misc/WColumnSelect.cxx +++ b/dbaccess/source/ui/misc/WColumnSelect.cxx @@ -28,6 +28,7 @@ #include <com/sun/star/sdbc/DataType.hpp> #include <com/sun/star/sdbc/ColumnValue.hpp> #include <com/sun/star/sdb/application/CopyTableOperation.hpp> +#include <vcl/svapp.hxx> #include <stringconstants.hxx> #include <functional> @@ -42,51 +43,40 @@ namespace CopyTableOperation = ::com::sun::star::sdb::application::CopyTableOper OUString OWizColumnSelect::GetTitle() const { return DBA_RES(STR_WIZ_COLUMN_SELECT_TITEL); } -OWizardPage::OWizardPage(vcl::Window* pParent, const OString& rID, const OUString& rUIXMLDescription) - : TabPage(pParent, rID, rUIXMLDescription) - ,m_pParent(static_cast<OCopyTableWizard*>(pParent)) - ,m_bFirstTime(true) +OWizardPage::OWizardPage(OCopyTableWizard* pWizard, TabPageParent pParent, const OUString& rUIXMLDescription, const OString& rID) + : TabPage(pParent.pPage ? Application::GetDefDialogParent() : pParent.pParent.get()) //just drag this along hidden in this scenario + , m_xBuilder(pParent.pPage ? Application::CreateBuilder(pParent.pPage, rUIXMLDescription) + : Application::CreateInterimBuilder(this, rUIXMLDescription)) + , m_xContainer(m_xBuilder->weld_container(rID)) + , m_pParent(pWizard) + , m_bFirstTime(true) { } OWizardPage::~OWizardPage() { - disposeOnce(); -} - -void OWizardPage::dispose() -{ - m_pParent.clear(); - TabPage::dispose(); } // OWizColumnSelect -OWizColumnSelect::OWizColumnSelect( vcl::Window* pParent) - :OWizardPage( pParent, "ApplyColPage", "dbaccess/ui/applycolpage.ui") +OWizColumnSelect::OWizColumnSelect(OCopyTableWizard* pWizard, TabPageParent pParent) + : OWizardPage(pWizard, pParent, "dbaccess/ui/applycolpage.ui", "ApplyColPage") + , m_xOrgColumnNames(m_xBuilder->weld_tree_view("from")) + , m_xColumn_RH(m_xBuilder->weld_button("colrh")) + , m_xColumns_RH(m_xBuilder->weld_button("colsrh")) + , m_xColumn_LH(m_xBuilder->weld_button("collh")) + , m_xColumns_LH(m_xBuilder->weld_button("colslh")) + , m_xNewColumnNames(m_xBuilder->weld_tree_view("to")) { - get(m_pOrgColumnNames, "from"); - get(m_pColumn_RH, "colrh"); - get(m_pColumns_RH, "colsrh"); - get(m_pColumn_LH, "collh"); - get(m_pColumns_LH, "colslh"); - get(m_pNewColumnNames, "to"); - - Size aSize(approximate_char_width() * 30, GetTextHeight() * 40); - m_pOrgColumnNames->set_width_request(aSize.Width()); - m_pOrgColumnNames->set_height_request(aSize.Height()); - m_pNewColumnNames->set_width_request(aSize.Width()); - m_pNewColumnNames->set_height_request(aSize.Height()); - - m_pColumn_RH->SetClickHdl(LINK(this,OWizColumnSelect,ButtonClickHdl)); - m_pColumn_LH->SetClickHdl(LINK(this,OWizColumnSelect,ButtonClickHdl)); - m_pColumns_RH->SetClickHdl(LINK(this,OWizColumnSelect,ButtonClickHdl)); - m_pColumns_LH->SetClickHdl(LINK(this,OWizColumnSelect,ButtonClickHdl)); - - m_pOrgColumnNames->EnableMultiSelection(true); - m_pNewColumnNames->EnableMultiSelection(true); - - m_pOrgColumnNames->SetDoubleClickHdl(LINK(this,OWizColumnSelect,ListDoubleClickHdl)); - m_pNewColumnNames->SetDoubleClickHdl(LINK(this,OWizColumnSelect,ListDoubleClickHdl)); + m_xColumn_RH->connect_clicked(LINK(this,OWizColumnSelect,ButtonClickHdl)); + m_xColumn_LH->connect_clicked(LINK(this,OWizColumnSelect,ButtonClickHdl)); + m_xColumns_RH->connect_clicked(LINK(this,OWizColumnSelect,ButtonClickHdl)); + m_xColumns_LH->connect_clicked(LINK(this,OWizColumnSelect,ButtonClickHdl)); + + m_xOrgColumnNames->set_selection_mode(SelectionMode::Multiple); + m_xNewColumnNames->set_selection_mode(SelectionMode::Multiple); + + m_xOrgColumnNames->connect_row_activated(LINK(this,OWizColumnSelect,ListDoubleClickHdl)); + m_xNewColumnNames->connect_row_activated(LINK(this,OWizColumnSelect,ListDoubleClickHdl)); } OWizColumnSelect::~OWizColumnSelect() @@ -96,29 +86,19 @@ OWizColumnSelect::~OWizColumnSelect() void OWizColumnSelect::dispose() { - while ( m_pNewColumnNames->GetEntryCount() ) + while (m_xNewColumnNames->n_children()) { - void* pData = m_pNewColumnNames->GetEntryData(0); - if ( pData ) - delete static_cast<OFieldDescription*>(pData); - - m_pNewColumnNames->RemoveEntry(0); + delete reinterpret_cast<OFieldDescription*>(m_xNewColumnNames->get_id(0).toInt64()); + m_xNewColumnNames->remove(0); } - m_pNewColumnNames->Clear(); - m_pOrgColumnNames.clear(); - m_pColumn_RH.clear(); - m_pColumns_RH.clear(); - m_pColumn_LH.clear(); - m_pColumns_LH.clear(); - m_pNewColumnNames.clear(); OWizardPage::dispose(); } void OWizColumnSelect::Reset() { // restore original state - clearListBox(*m_pOrgColumnNames); - clearListBox(*m_pNewColumnNames); + clearListBox(*m_xOrgColumnNames); + clearListBox(*m_xNewColumnNames); m_pParent->m_mNameMapping.clear(); // insert the source columns in the left listbox @@ -126,12 +106,12 @@ void OWizColumnSelect::Reset() for (auto const& column : rSrcColumns) { - const sal_Int32 nPos = m_pOrgColumnNames->InsertEntry(column->first); - m_pOrgColumnNames->SetEntryData(nPos,column->second); + OUString sId(OUString::number(reinterpret_cast<sal_Int64>(column->second))); + m_xOrgColumnNames->append(sId, column->first); } - if(m_pOrgColumnNames->GetEntryCount()) - m_pOrgColumnNames->SelectEntryPos(0); + if (m_xOrgColumnNames->n_children()) + m_xOrgColumnNames->select(0); m_bFirstTime = false; } @@ -142,7 +122,7 @@ void OWizColumnSelect::ActivatePage( ) if(m_pParent->getDestColumns().empty()) Reset(); - clearListBox(*m_pNewColumnNames); + clearListBox(*m_xNewColumnNames); const ODatabaseExport::TColumnVector& rDestColumns = m_pParent->getDestVector(); @@ -157,14 +137,14 @@ void OWizColumnSelect::ActivatePage( ) { if (rSrcColumns.find(column->first) != rSrcColumns.end()) { - const sal_Int32 nPos = m_pNewColumnNames->InsertEntry(column->first); - m_pNewColumnNames->SetEntryData(nPos,new OFieldDescription(*(column->second))); - m_pOrgColumnNames->RemoveEntry(column->first); + OUString sId(OUString::number(reinterpret_cast<sal_Int64>(new OFieldDescription(*(column->second))))); + m_xNewColumnNames->append(sId, column->first); + m_xOrgColumnNames->remove_text(column->first); } } - m_pParent->GetOKButton().Enable(m_pNewColumnNames->GetEntryCount() != 0); - m_pParent->EnableNextButton(m_pNewColumnNames->GetEntryCount() && m_pParent->getOperation() != CopyTableOperation::AppendData); - m_pColumns_RH->GrabFocus(); + m_pParent->GetOKButton().set_sensitive(m_xNewColumnNames->n_children() != 0); + m_pParent->EnableNextButton(m_xNewColumnNames->n_children() && m_pParent->getOperation() != CopyTableOperation::AppendData); + m_xColumns_RH->grab_focus(); } bool OWizColumnSelect::LeavePage() @@ -172,14 +152,14 @@ bool OWizColumnSelect::LeavePage() m_pParent->clearDestColumns(); - for(sal_Int32 i=0 ; i< m_pNewColumnNames->GetEntryCount();++i) + for(sal_Int32 i=0 ; i< m_xNewColumnNames->n_children();++i) { - OFieldDescription* pField = static_cast<OFieldDescription*>(m_pNewColumnNames->GetEntryData(i)); + OFieldDescription* pField = reinterpret_cast<OFieldDescription*>(m_xNewColumnNames->get_id(i).toInt64()); OSL_ENSURE(pField,"The field information can not be null!"); m_pParent->insertColumn(i,pField); } - clearListBox(*m_pNewColumnNames); + clearListBox(*m_xNewColumnNames); if ( m_pParent->GetPressedButton() == OCopyTableWizard::WIZARD_NEXT || m_pParent->GetPressedButton() == OCopyTableWizard::WIZARD_FINISH @@ -189,32 +169,32 @@ bool OWizColumnSelect::LeavePage() return true; } -IMPL_LINK( OWizColumnSelect, ButtonClickHdl, Button *, pButton, void ) +IMPL_LINK(OWizColumnSelect, ButtonClickHdl, weld::Button&, rButton, void) { - ListBox *pLeft = nullptr; - ListBox *pRight = nullptr; + weld::TreeView *pLeft = nullptr; + weld::TreeView *pRight = nullptr; bool bAll = false; - if (pButton == m_pColumn_RH) + if (&rButton == m_xColumn_RH.get()) { - pLeft = m_pOrgColumnNames; - pRight = m_pNewColumnNames; + pLeft = m_xOrgColumnNames.get(); + pRight = m_xNewColumnNames.get(); } - else if(pButton == m_pColumn_LH) + else if (&rButton == m_xColumn_LH.get()) { - pLeft = m_pNewColumnNames; - pRight = m_pOrgColumnNames; + pLeft = m_xNewColumnNames.get(); + pRight = m_xOrgColumnNames.get(); } - else if(pButton == m_pColumns_RH) + else if (&rButton == m_xColumns_RH.get()) { - pLeft = m_pOrgColumnNames; - pRight = m_pNewColumnNames; + pLeft = m_xOrgColumnNames.get(); + pRight = m_xNewColumnNames.get(); bAll = true; } - else if(pButton == m_pColumns_LH) + else if (&rButton == m_xColumns_LH.get()) { - pLeft = m_pNewColumnNames; - pRight = m_pOrgColumnNames; + pLeft = m_xNewColumnNames.get(); + pRight = m_xOrgColumnNames.get(); bAll = true; } @@ -231,39 +211,42 @@ IMPL_LINK( OWizColumnSelect, ButtonClickHdl, Button *, pButton, void ) if(!bAll) { - for(sal_Int32 i=0; i < pLeft->GetSelectedEntryCount(); ++i) - moveColumn(pRight,pLeft,aRightColumns,pLeft->GetSelectedEntry(i),sExtraChars,nMaxNameLen,aCase); + auto aRows = pLeft->get_selected_rows(); + std::sort(aRows.begin(), aRows.end()); + + for (auto it = aRows.begin(); it != aRows.end(); ++it) + moveColumn(pRight,pLeft,aRightColumns,pLeft->get_text(*it),sExtraChars,nMaxNameLen,aCase); - for(sal_Int32 j=pLeft->GetSelectedEntryCount(); j ; --j) - pLeft->RemoveEntry(pLeft->GetSelectedEntry(j-1)); + for (auto it = aRows.rbegin(); it != aRows.rend(); ++it) + pLeft->remove(*it); } else { - const sal_Int32 nEntries = pLeft->GetEntryCount(); + const sal_Int32 nEntries = pLeft->n_children(); for(sal_Int32 i=0; i < nEntries; ++i) - moveColumn(pRight,pLeft,aRightColumns,pLeft->GetEntry(i),sExtraChars,nMaxNameLen,aCase); - for(sal_Int32 j=pLeft->GetEntryCount(); j ; ) - pLeft->RemoveEntry(--j); + moveColumn(pRight,pLeft,aRightColumns,pLeft->get_text(i),sExtraChars,nMaxNameLen,aCase); + for(sal_Int32 j=pLeft->n_children(); j ; ) + pLeft->remove(--j); } enableButtons(); - if(m_pOrgColumnNames->GetEntryCount()) - m_pOrgColumnNames->SelectEntryPos(0); + if (m_xOrgColumnNames->n_children()) + m_xOrgColumnNames->select(0); } -IMPL_LINK( OWizColumnSelect, ListDoubleClickHdl, ListBox&, rListBox, void ) +IMPL_LINK( OWizColumnSelect, ListDoubleClickHdl, weld::TreeView&, rListBox, void ) { - ListBox *pLeft,*pRight; - if(&rListBox == m_pOrgColumnNames) + weld::TreeView *pLeft,*pRight; + if (&rListBox == m_xOrgColumnNames.get()) { - pLeft = m_pOrgColumnNames; - pRight = m_pNewColumnNames; + pLeft = m_xOrgColumnNames.get(); + pRight = m_xNewColumnNames.get(); } else { - pRight = m_pOrgColumnNames; - pLeft = m_pNewColumnNames; + pRight = m_xOrgColumnNames.get(); + pLeft = m_xNewColumnNames.get(); } // If database is able to process PrimaryKeys, set PrimaryKey @@ -275,30 +258,32 @@ IMPL_LINK( OWizColumnSelect, ListDoubleClickHdl, ListBox&, rListBox, void ) std::vector< OUString> aRightColumns; fillColumns(pRight,aRightColumns); - for(sal_Int32 i=0; i < pLeft->GetSelectedEntryCount(); ++i) - moveColumn(pRight,pLeft,aRightColumns,pLeft->GetSelectedEntry(i),sExtraChars,nMaxNameLen,aCase); - for(sal_Int32 j=pLeft->GetSelectedEntryCount(); j ; ) - pLeft->RemoveEntry(pLeft->GetSelectedEntry(--j)); + auto aRows = pLeft->get_selected_rows(); + std::sort(aRows.begin(), aRows.end()); + + for (auto it = aRows.begin(); it != aRows.end(); ++it) + moveColumn(pRight,pLeft,aRightColumns,pLeft->get_text(*it),sExtraChars,nMaxNameLen,aCase); + + for (auto it = aRows.rbegin(); it != aRows.rend(); ++it) + pLeft->remove(*it); enableButtons(); } -void OWizColumnSelect::clearListBox(ListBox& _rListBox) +void OWizColumnSelect::clearListBox(weld::TreeView& rListBox) { - while(_rListBox.GetEntryCount()) - _rListBox.RemoveEntry(0); - _rListBox.Clear(); + rListBox.clear(); } -void OWizColumnSelect::fillColumns(ListBox const * pRight,std::vector< OUString> &_rRightColumns) +void OWizColumnSelect::fillColumns(weld::TreeView const * pRight,std::vector< OUString> &_rRightColumns) { - const sal_Int32 nCount = pRight->GetEntryCount(); + const sal_Int32 nCount = pRight->n_children(); _rRightColumns.reserve(nCount); - for(sal_Int32 i=0; i < nCount; ++i) - _rRightColumns.push_back(pRight->GetEntry(i)); + for (sal_Int32 i=0; i < nCount; ++i) + _rRightColumns.push_back(pRight->get_text(i)); } -void OWizColumnSelect::createNewColumn( ListBox* _pListbox, +void OWizColumnSelect::createNewColumn( weld::TreeView* _pListbox, OFieldDescription const * _pSrcField, std::vector< OUString>& _rRightColumns, const OUString& _sColumnName, @@ -317,25 +302,25 @@ void OWizColumnSelect::createNewColumn( ListBox* _pListbox, if ( !m_pParent->supportsPrimaryKey() ) pNewField->SetPrimaryKey(false); - _pListbox->SetEntryData(_pListbox->InsertEntry(sConvertedName),pNewField); + _pListbox->append(OUString::number(reinterpret_cast<sal_Int64>(pNewField)), sConvertedName); _rRightColumns.push_back(sConvertedName); if ( !bNotConvert ) m_pParent->showColumnTypeNotSupported(sConvertedName); } -void OWizColumnSelect::moveColumn( ListBox* _pRight, - ListBox const * _pLeft, +void OWizColumnSelect::moveColumn( weld::TreeView* _pRight, + weld::TreeView const * _pLeft, std::vector< OUString>& _rRightColumns, const OUString& _sColumnName, const OUString& _sExtraChars, sal_Int32 _nMaxNameLen, const ::comphelper::UStringMixEqual& _aCase) { - if(_pRight == m_pNewColumnNames) + if(_pRight == m_xNewColumnNames.get()) { // we copy the column into the new format for the dest - OFieldDescription* pSrcField = static_cast<OFieldDescription*>(_pLeft->GetEntryData(_pLeft->GetEntryPos(_sColumnName))); + OFieldDescription* pSrcField = reinterpret_cast<OFieldDescription*>(_pLeft->get_id(_pLeft->find_text(_sColumnName)).toInt64()); createNewColumn(_pRight,pSrcField,_rRightColumns,_sColumnName,_sExtraChars,_nMaxNameLen,_aCase); } else @@ -359,8 +344,10 @@ void OWizColumnSelect::moveColumn( ListBox* _pRight, OSL_ENSURE( aPos != rSrcVector.end(),"Invalid position for the iterator here!"); ODatabaseExport::TColumnVector::size_type nPos = (aPos - rSrcVector.begin()) - adjustColumnPosition(_pLeft, _sColumnName, (aPos - rSrcVector.begin()), _aCase); - _pRight->SetEntryData( _pRight->InsertEntry( (*aIter).first, sal::static_int_cast< sal_uInt16 >(nPos)),aSrcIter->second ); - _rRightColumns.push_back((*aIter).first); + OUString sId(OUString::number(reinterpret_cast<sal_Int64>(aSrcIter->second))); + const OUString& rStr = (*aIter).first; + _pRight->insert(nullptr, nPos, &rStr, &sId, nullptr, nullptr, nullptr, false, nullptr); + _rRightColumns.push_back(rStr); m_pParent->removeColumnNameFromNameMap(_sColumnName); } } @@ -370,23 +357,23 @@ void OWizColumnSelect::moveColumn( ListBox* _pRight, // not enough. We need to take into account what fields have // been removed earlier and adjust accordingly. Based on the // algorithm employed in moveColumn(). -sal_Int32 OWizColumnSelect::adjustColumnPosition( ListBox const * _pLeft, - const OUString& _sColumnName, - ODatabaseExport::TColumnVector::size_type nCurrentPos, - const ::comphelper::UStringMixEqual& _aCase) +sal_Int32 OWizColumnSelect::adjustColumnPosition(weld::TreeView const * _pLeft, + const OUString& _sColumnName, + ODatabaseExport::TColumnVector::size_type nCurrentPos, + const ::comphelper::UStringMixEqual& _aCase) { sal_Int32 nAdjustedPos = 0; // if returning all entries to their original position, // then there is no need to adjust the positions. - if (m_pColumns_LH->HasFocus()) + if (m_xColumns_LH->has_focus()) return nAdjustedPos; - const sal_Int32 nCount = _pLeft->GetEntryCount(); + const sal_Int32 nCount = _pLeft->n_children(); OUString sColumnString; for(sal_Int32 i=0; i < nCount; ++i) { - sColumnString = _pLeft->GetEntry(i); + sColumnString = _pLeft->get_text(i); if(_sColumnName != sColumnString) { // find the new column in the dest name mapping to obtain the old column @@ -417,11 +404,11 @@ sal_Int32 OWizColumnSelect::adjustColumnPosition( ListBox const * _pLeft, void OWizColumnSelect::enableButtons() { - bool bEntries = m_pNewColumnNames->GetEntryCount() != 0; - if(!bEntries) + bool bEntries = m_xNewColumnNames->n_children() != 0; + if (!bEntries) m_pParent->m_mNameMapping.clear(); - m_pParent->GetOKButton().Enable(bEntries); + m_pParent->GetOKButton().set_sensitive(bEntries); m_pParent->EnableNextButton(bEntries && m_pParent->getOperation() != CopyTableOperation::AppendData); } diff --git a/dbaccess/source/ui/misc/WCopyTable.cxx b/dbaccess/source/ui/misc/WCopyTable.cxx index 46f563d62959..d5bb45130773 100644 --- a/dbaccess/source/ui/misc/WCopyTable.cxx +++ b/dbaccess/source/ui/misc/WCopyTable.cxx @@ -57,7 +57,6 @@ #include <sal/log.hxx> #include <tools/debug.hxx> #include <tools/diagnose_ex.h> -#include <vcl/waitobj.hxx> #include <functional> @@ -487,25 +486,25 @@ namespace } // OCopyTableWizard -OCopyTableWizard::OCopyTableWizard( vcl::Window * pParent, const OUString& _rDefaultName, sal_Int16 _nOperation, +OCopyTableWizard::OCopyTableWizard(weld::Window* pParent, const OUString& _rDefaultName, sal_Int16 _nOperation, const ICopyTableSourceObject& _rSourceObject, const Reference< XConnection >& _xSourceConnection, const Reference< XConnection >& _xConnection, const Reference< XComponentContext >& _rxContext, - const Reference< XInteractionHandler>& _xInteractionHandler) - : WizardDialog( pParent, "RTFCopyTable", "dbaccess/ui/rtfcopytabledialog.ui") - ,m_mNameMapping(_xConnection->getMetaData().is() && _xConnection->getMetaData()->supportsMixedCaseQuotedIdentifiers()) - ,m_xDestConnection( _xConnection ) - ,m_rSourceObject( _rSourceObject ) - ,m_xFormatter( getNumberFormatter( _xConnection, _rxContext ) ) - ,m_xContext(_rxContext) - ,m_xInteractionHandler(_xInteractionHandler) - ,m_sTypeNames(DBA_RES(STR_TABLEDESIGN_DBFIELDTYPES)) - ,m_nPageCount(0) - ,m_bDeleteSourceColumns(true) - ,m_bInterConnectionCopy( _xSourceConnection != _xConnection ) - ,m_sName( _rDefaultName ) - ,m_nOperation( _nOperation ) - ,m_ePressed( WIZARD_NONE ) - ,m_bCreatePrimaryKeyColumn(false) + const Reference< XInteractionHandler>& _xInteractionHandler) + : vcl::RoadmapWizardMachine(pParent) + , m_mNameMapping(_xConnection->getMetaData().is() && _xConnection->getMetaData()->supportsMixedCaseQuotedIdentifiers()) + , m_xDestConnection( _xConnection ) + , m_rSourceObject( _rSourceObject ) + , m_xFormatter( getNumberFormatter( _xConnection, _rxContext ) ) + , m_xContext(_rxContext) + , m_xInteractionHandler(_xInteractionHandler) + , m_sTypeNames(DBA_RES(STR_TABLEDESIGN_DBFIELDTYPES)) + , m_nPageCount(0) + , m_bDeleteSourceColumns(true) + , m_bInterConnectionCopy( _xSourceConnection != _xConnection ) + , m_sName( _rDefaultName ) + , m_nOperation( _nOperation ) + , m_ePressed( WIZARD_NONE ) + , m_bCreatePrimaryKeyColumn(false) { construct(); @@ -566,38 +565,47 @@ OCopyTableWizard::OCopyTableWizard( vcl::Window * pParent, const OUString& _rDef m_sName = ::dbtools::composeTableName(m_xDestConnection->getMetaData(),sCatalog,sSchema,sTable,false,::dbtools::EComposeRule::InTableDefinitions); } - VclPtrInstance<OCopyTable> pPage1( this ); + VclPtrInstance<OCopyTable> pPage1(this, CreatePageContainer()); pPage1->disallowUseHeaderLine(); if ( !bAllowViews ) pPage1->disallowViews(); pPage1->setCreateStyleAction(); AddWizardPage(pPage1); - AddWizardPage( VclPtr<OWizNameMatching>::Create( this ) ); - AddWizardPage( VclPtr<OWizColumnSelect>::Create( this ) ); - AddWizardPage( VclPtr<OWizNormalExtend>::Create( this ) ); + AddWizardPage( VclPtr<OWizNameMatching>::Create(this, CreatePageContainer() ) ); + AddWizardPage( VclPtr<OWizColumnSelect>::Create(this, CreatePageContainer() ) ); + AddWizardPage( VclPtr<OWizNormalExtend>::Create(this, CreatePageContainer() ) ); ActivatePage(); + + m_xAssistant->set_current_page(0); } -OCopyTableWizard::OCopyTableWizard( vcl::Window* pParent, const OUString& _rDefaultName, sal_Int16 _nOperation, +TabPageParent OCopyTableWizard::CreatePageContainer() +{ + OString sIdent(OString::number(m_nPageCount)); + weld::Container* pPageContainer = m_xAssistant->append_page(sIdent); + return TabPageParent(pPageContainer, this); +} + +OCopyTableWizard::OCopyTableWizard( weld::Window* pParent, const OUString& _rDefaultName, sal_Int16 _nOperation, const ODatabaseExport::TColumns& _rSourceColumns, const ODatabaseExport::TColumnVector& _rSourceColVec, const Reference< XConnection >& _xConnection, const Reference< XNumberFormatter >& _xFormatter, TypeSelectionPageFactory _pTypeSelectionPageFactory, SvStream& _rTypeSelectionPageArg, const Reference< XComponentContext >& _rxContext ) - :WizardDialog( pParent, "RTFCopyTable", "dbaccess/ui/rtfcopytabledialog.ui") - ,m_vSourceColumns(_rSourceColumns) - ,m_mNameMapping(_xConnection->getMetaData().is() && _xConnection->getMetaData()->supportsMixedCaseQuotedIdentifiers()) - ,m_xDestConnection( _xConnection ) - ,m_rSourceObject( DummyCopySource::Instance() ) - ,m_xFormatter(_xFormatter) - ,m_xContext(_rxContext) - ,m_sTypeNames(DBA_RES(STR_TABLEDESIGN_DBFIELDTYPES)) - ,m_nPageCount(0) - ,m_bDeleteSourceColumns(false) - ,m_bInterConnectionCopy( false ) - ,m_sName(_rDefaultName) - ,m_nOperation( _nOperation ) - ,m_ePressed( WIZARD_NONE ) - ,m_bCreatePrimaryKeyColumn(false) + : vcl::RoadmapWizardMachine(pParent) + , m_vSourceColumns(_rSourceColumns) + , m_mNameMapping(_xConnection->getMetaData().is() && _xConnection->getMetaData()->supportsMixedCaseQuotedIdentifiers()) + , m_xDestConnection( _xConnection ) + , m_rSourceObject( DummyCopySource::Instance() ) + , m_xFormatter(_xFormatter) + , m_xContext(_rxContext) + , m_sTypeNames(DBA_RES(STR_TABLEDESIGN_DBFIELDTYPES)) + , m_nPageCount(0) + , m_bDeleteSourceColumns(false) + , m_bInterConnectionCopy( false ) + , m_sName(_rDefaultName) + , m_nOperation( _nOperation ) + , m_ePressed( WIZARD_NONE ) + , m_bCreatePrimaryKeyColumn(false) { construct(); for (auto const& sourceCol : _rSourceColVec) @@ -610,65 +618,45 @@ OCopyTableWizard::OCopyTableWizard( vcl::Window* pParent, const OUString& _rDefa m_xInteractionHandler = InteractionHandler::createWithParent(m_xContext, nullptr); - VclPtrInstance<OCopyTable> pPage1( this ); + VclPtrInstance<OCopyTable> pPage1( this, CreatePageContainer() ); pPage1->disallowViews(); pPage1->setCreateStyleAction(); AddWizardPage( pPage1 ); - AddWizardPage( VclPtr<OWizNameMatching>::Create( this ) ); - AddWizardPage( VclPtr<OWizColumnSelect>::Create( this ) ); - AddWizardPage( (*_pTypeSelectionPageFactory)( this, _rTypeSelectionPageArg ) ); + AddWizardPage( VclPtr<OWizNameMatching>::Create( this, CreatePageContainer() ) ); + AddWizardPage( VclPtr<OWizColumnSelect>::Create( this, CreatePageContainer() ) ); + AddWizardPage( (*_pTypeSelectionPageFactory)( this, CreatePageContainer(), _rTypeSelectionPageArg ) ); ActivatePage(); + + m_xAssistant->set_current_page(0); } void OCopyTableWizard::construct() { - SetSizePixel(Size(700, 350)); - - m_pbHelp = VclPtr<HelpButton>::Create(this, WB_TABSTOP); - AddButton(m_pbHelp); - m_pbCancel = VclPtr<CancelButton>::Create(this, WB_TABSTOP); - AddButton(m_pbCancel); - m_pbPrev = VclPtr<PushButton>::Create(this, WB_TABSTOP); - AddButton(m_pbPrev); - m_pbNext = VclPtr<PushButton>::Create(this, WB_TABSTOP); - AddButton(m_pbNext); - m_pbFinish = VclPtr<PushButton>::Create(this, WB_TABSTOP); - AddButton(m_pbFinish); - - m_pbHelp->SetSizePixel( LogicToPixel(Size(50, 14), MapMode(MapUnit::MapAppFont)) ); - m_pbCancel->SetSizePixel( LogicToPixel(Size(50, 14), MapMode(MapUnit::MapAppFont)) ); - m_pbPrev->SetSizePixel( LogicToPixel(Size(50, 14), MapMode(MapUnit::MapAppFont)) ); - m_pbNext->SetSizePixel( LogicToPixel(Size(50, 14), MapMode(MapUnit::MapAppFont)) ); - m_pbFinish->SetSizePixel( LogicToPixel(Size(50, 14), MapMode(MapUnit::MapAppFont)) ); - - m_pbPrev->SetText(DBA_RES(STR_WIZ_PB_PREV)); - m_pbNext->SetText(DBA_RES(STR_WIZ_PB_NEXT)); - m_pbFinish->SetText(DBA_RES(STR_WIZ_PB_OK)); - - m_pbHelp->Show(); - m_pbCancel->Show(); - m_pbPrev->Show(); - m_pbNext->Show(); - m_pbFinish->Show(); + m_xAssistant->set_size_request(700, 350); - m_pbPrev->SetClickHdl( LINK( this, OCopyTableWizard, ImplPrevHdl ) ); - m_pbNext->SetClickHdl( LINK( this, OCopyTableWizard, ImplNextHdl ) ); - m_pbFinish->SetClickHdl( LINK( this, OCopyTableWizard, ImplOKHdl ) ); + m_xPrevPage->set_label(DBA_RES(STR_WIZ_PB_PREV)); + m_xNextPage->set_label(DBA_RES(STR_WIZ_PB_NEXT)); + m_xFinish->set_label(DBA_RES(STR_WIZ_PB_OK)); - SetActivatePageHdl( LINK( this, OCopyTableWizard, ImplActivateHdl ) ); + m_xHelp->show(); + m_xCancel->show(); + m_xPrevPage->show(); + m_xNextPage->show(); + m_xFinish->show(); - SetPrevButton( m_pbPrev ); - SetNextButton( m_pbNext ); + m_xPrevPage->connect_clicked( LINK( this, OCopyTableWizard, ImplPrevHdl ) ); + m_xNextPage->connect_clicked( LINK( this, OCopyTableWizard, ImplNextHdl ) ); + m_xFinish->connect_clicked( LINK( this, OCopyTableWizard, ImplOKHdl ) ); - m_pbNext->GrabFocus(); + m_xNextPage->grab_focus(); if (!m_vDestColumns.empty()) // source is a html or rtf table - m_pbNext->SetStyle(m_pbFinish->GetStyle() | WB_DEFBUTTON); + m_xNextPage->set_has_default(true); else - m_pbFinish->SetStyle(m_pbFinish->GetStyle() | WB_DEFBUTTON); + m_xFinish->set_has_default(true); m_pTypeInfo = std::make_shared<OTypeInfo>(); m_pTypeInfo->aUIName = m_sTypeNames.getToken(TYPE_OTHER, ';'); @@ -677,20 +665,6 @@ void OCopyTableWizard::construct() OCopyTableWizard::~OCopyTableWizard() { - disposeOnce(); -} - -void OCopyTableWizard::dispose() -{ - for ( ;; ) - { - VclPtr<TabPage> pPage = GetPage(0); - if ( pPage == nullptr ) - break; - RemovePage( pPage ); - pPage.disposeAndClear(); - } - if ( m_bDeleteSourceColumns ) clearColumns(m_vSourceColumns,m_vSourceVec); @@ -700,16 +674,9 @@ void OCopyTableWizard::dispose() m_aTypeInfoIndex.clear(); m_aTypeInfo.clear(); m_aDestTypeInfoIndex.clear(); - - m_pbHelp.disposeAndClear(); - m_pbCancel.disposeAndClear(); - m_pbPrev.disposeAndClear(); - m_pbNext.disposeAndClear(); - m_pbFinish.disposeAndClear(); - WizardDialog::dispose(); } -IMPL_LINK_NOARG(OCopyTableWizard, ImplPrevHdl, Button*, void) +IMPL_LINK_NOARG(OCopyTableWizard, ImplPrevHdl, weld::Button&, void) { m_ePressed = WIZARD_PREV; if ( GetCurLevel() ) @@ -726,7 +693,7 @@ IMPL_LINK_NOARG(OCopyTableWizard, ImplPrevHdl, Button*, void) } } -IMPL_LINK_NOARG(OCopyTableWizard, ImplNextHdl, Button*, void) +IMPL_LINK_NOARG(OCopyTableWizard, ImplNextHdl, weld::Button&, void) { m_ePressed = WIZARD_NEXT; if ( GetCurLevel() < MAX_PAGES ) @@ -831,14 +798,14 @@ bool OCopyTableWizard::CheckColumns(sal_Int32& _rnBreakPos) return bRet; } -IMPL_LINK_NOARG(OCopyTableWizard, ImplOKHdl, Button*, void) +IMPL_LINK_NOARG(OCopyTableWizard, ImplOKHdl, weld::Button&, void) { m_ePressed = WIZARD_FINISH; bool bFinish = DeactivatePage(); if(bFinish) { - WaitObject aWait(this); + weld::WaitObject aWait(m_xAssistant.get()); switch(getOperation()) { case CopyTableOperation::CopyDefinitionAndData: @@ -917,11 +884,10 @@ IMPL_LINK_NOARG(OCopyTableWizard, ImplOKHdl, Button*, void) } } - EndDialog(RET_OK); + m_xAssistant->response(RET_OK); } } - void OCopyTableWizard::setCreatePrimaryKey( bool _bDoCreate, const OUString& _rSuggestedName ) { m_bCreatePrimaryKeyColumn = _bDoCreate; @@ -934,10 +900,10 @@ void OCopyTableWizard::setCreatePrimaryKey( bool _bDoCreate, const OUString& _rS pSettingsPage->setCreatePrimaryKey( _bDoCreate, _rSuggestedName ); } -IMPL_LINK_NOARG(OCopyTableWizard, ImplActivateHdl, WizardDialog*, void) +void OCopyTableWizard::ActivatePage() { OWizardPage* pCurrent = static_cast<OWizardPage*>(GetPage(GetCurLevel())); - if(pCurrent) + if (pCurrent) { bool bFirstTime = pCurrent->IsFirstTime(); if(bFirstTime) @@ -945,9 +911,7 @@ IMPL_LINK_NOARG(OCopyTableWizard, ImplActivateHdl, WizardDialog*, void) CheckButtons(); - SetText(pCurrent->GetTitle()); - - Invalidate(); + m_xAssistant->set_title(pCurrent->GetTitle()); } } @@ -956,27 +920,27 @@ void OCopyTableWizard::CheckButtons() if(GetCurLevel() == 0) // the first page has no back button { if(m_nPageCount > 1) - m_pbNext->Enable(); + m_xNextPage->set_sensitive(true); else - m_pbNext->Enable(false); + m_xNextPage->set_sensitive(false); - m_pbPrev->Enable(false); + m_xPrevPage->set_sensitive(false); } else if(GetCurLevel() == m_nPageCount-1) // the last page has no next button { - m_pbNext->Enable(false); - m_pbPrev->Enable(); + m_xNextPage->set_sensitive(false); + m_xPrevPage->set_sensitive(true); } else { - m_pbPrev->Enable(); + m_xPrevPage->set_sensitive(true); // next already has its state } } void OCopyTableWizard::EnableNextButton(bool bEnable) { - m_pbNext->Enable(bEnable); + m_xNextPage->set_sensitive(bEnable); } bool OCopyTableWizard::DeactivatePage() @@ -1256,7 +1220,7 @@ Reference< XPropertySet > OCopyTableWizard::createTable() { xSuppDestinationColumns.set( xTable, UNO_QUERY_THROW ); // insert new table name into table filter - ::dbaui::appendToFilter(m_xDestConnection, m_sName, GetComponentContext(), GetFrameWeld()); + ::dbaui::appendToFilter(m_xDestConnection, m_sName, GetComponentContext(), m_xAssistant.get()); // copy ui settings m_rSourceObject.copyUISettingsTo( xTable ); diff --git a/dbaccess/source/ui/misc/WExtendPages.cxx b/dbaccess/source/ui/misc/WExtendPages.cxx index 6d43919be87f..f34661cabd7d 100644 --- a/dbaccess/source/ui/misc/WExtendPages.cxx +++ b/dbaccess/source/ui/misc/WExtendPages.cxx @@ -22,9 +22,11 @@ #include <HtmlReader.hxx> #include <WCopyTable.hxx> -using namespace dbaui; using namespace com::sun::star; +namespace dbaui +{ + void OWizHTMLExtend::createReaderAndCallParser(sal_Int32 _nRows) { tools::SvRef<OHTMLReader> xParser = new OHTMLReader(*m_pParserStream, @@ -51,13 +53,10 @@ void OWizRTFExtend::createReaderAndCallParser(sal_Int32 _nRows) xParser->CallParser(); } -OWizNormalExtend::OWizNormalExtend(vcl::Window* pParent) : OWizTypeSelect( pParent ) +void OWizNormalExtend::createReaderAndCallParser(sal_Int32 /*_nRows*/) { - EnableAuto(false); } -void OWizNormalExtend::createReaderAndCallParser(sal_Int32 /*_nRows*/) -{ } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/dbaccess/source/ui/misc/WNameMatch.cxx b/dbaccess/source/ui/misc/WNameMatch.cxx index 8fd6226b43ed..258394be15c0 100644 --- a/dbaccess/source/ui/misc/WNameMatch.cxx +++ b/dbaccess/source/ui/misc/WNameMatch.cxx @@ -33,105 +33,74 @@ using namespace ::dbaui; // OWizColumnSelect -OWizNameMatching::OWizNameMatching(vcl::Window* pParent) - : OWizardPage(pParent, "NameMatching", "dbaccess/ui/namematchingpage.ui") +OWizNameMatching::OWizNameMatching(OCopyTableWizard* pWizard, TabPageParent pParent) + : OWizardPage(pWizard, pParent, "dbaccess/ui/namematchingpage.ui", "NameMatching") + , m_xTABLE_LEFT(m_xBuilder->weld_label("leftlabel")) + , m_xTABLE_RIGHT(m_xBuilder->weld_label("rightlabel")) + , m_xCTRL_LEFT(m_xBuilder->weld_tree_view("left")) + , m_xCTRL_RIGHT(m_xBuilder->weld_tree_view("right")) + , m_xColumn_up(m_xBuilder->weld_button("up")) + , m_xColumn_down(m_xBuilder->weld_button("down")) + , m_xColumn_up_right(m_xBuilder->weld_button("up_right")) + , m_xColumn_down_right(m_xBuilder->weld_button("down_right")) + , m_xAll(m_xBuilder->weld_button("all")) + , m_xNone(m_xBuilder->weld_button("none")) { - Image aImgUp(StockImage::Yes, BMP_UP); - Image aImgDown(StockImage::Yes, BMP_DOWN); - get(m_pTABLE_LEFT, "leftlabel"); - get(m_pTABLE_RIGHT, "rightlabel"); - get(m_pCTRL_LEFT, "left"); - get(m_pCTRL_RIGHT, "right"); - get(m_pColumn_up, "up"); - m_pColumn_up->SetModeImage(aImgUp); - get(m_pColumn_down, "down"); - m_pColumn_down->SetModeImage(aImgDown); - get(m_pColumn_up_right, "up_right"); - m_pColumn_up_right->SetModeImage(aImgUp); - get(m_pColumn_down_right, "down_right"); - m_pColumn_down_right->SetModeImage(aImgDown); - get(m_pAll, "all"); - get(m_pNone, "none"); - - m_pColumn_up->SetClickHdl(LINK(this,OWizNameMatching,ButtonClickHdl)); - m_pColumn_down->SetClickHdl(LINK(this,OWizNameMatching,ButtonClickHdl)); - - m_pColumn_up_right->SetClickHdl(LINK(this,OWizNameMatching,RightButtonClickHdl)); - m_pColumn_down_right->SetClickHdl(LINK(this,OWizNameMatching,RightButtonClickHdl)); - - m_pAll->SetClickHdl(LINK(this,OWizNameMatching,AllNoneClickHdl)); - m_pNone->SetClickHdl(LINK(this,OWizNameMatching,AllNoneClickHdl)); - - m_pCTRL_LEFT->SetSelectHdl(LINK(this,OWizNameMatching,TableListClickHdl)); - m_pCTRL_RIGHT->SetSelectHdl(LINK(this,OWizNameMatching,TableListRightSelectHdl)); - m_pCTRL_RIGHT->EnableCheckButton( nullptr ); - - m_pCTRL_LEFT->SetForceMakeVisible( true ); - m_pCTRL_RIGHT->SetForceMakeVisible( true ); - - m_sSourceText = m_pTABLE_LEFT->GetText() + "\n"; - m_sDestText = m_pTABLE_RIGHT->GetText() + "\n"; -} + OUString aImgUp(BMP_UP); + OUString aImgDown(BMP_DOWN); + m_xColumn_up->set_from_icon_name(aImgUp); + m_xColumn_down->set_from_icon_name(aImgDown); + m_xColumn_up_right->set_from_icon_name(aImgUp); + m_xColumn_down_right->set_from_icon_name(aImgDown); -OWizNameMatching::~OWizNameMatching() -{ - disposeOnce(); + m_xColumn_up->connect_clicked(LINK(this,OWizNameMatching,ButtonClickHdl)); + m_xColumn_down->connect_clicked(LINK(this,OWizNameMatching,ButtonClickHdl)); + + m_xColumn_up_right->connect_clicked(LINK(this,OWizNameMatching,RightButtonClickHdl)); + m_xColumn_down_right->connect_clicked(LINK(this,OWizNameMatching,RightButtonClickHdl)); + + m_xAll->connect_clicked(LINK(this,OWizNameMatching,AllNoneClickHdl)); + m_xNone->connect_clicked(LINK(this,OWizNameMatching,AllNoneClickHdl)); + + m_xCTRL_LEFT->connect_changed(LINK(this,OWizNameMatching,TableListClickHdl)); + m_xCTRL_RIGHT->connect_changed(LINK(this,OWizNameMatching,TableListRightSelectHdl)); + + m_sSourceText = m_xTABLE_LEFT->get_label() + "\n"; + m_sDestText = m_xTABLE_RIGHT->get_label() + "\n"; } -void OWizNameMatching::dispose() +OWizNameMatching::~OWizNameMatching() { - m_pTABLE_LEFT.clear(); - m_pTABLE_RIGHT.clear(); - m_pCTRL_LEFT.clear(); - m_pCTRL_RIGHT.clear(); - m_pColumn_up.clear(); - m_pColumn_down.clear(); - m_pColumn_up_right.clear(); - m_pColumn_down_right.clear(); - m_pAll.clear(); - m_pNone.clear(); - OWizardPage::dispose(); } void OWizNameMatching::Reset() { - // restore original state; - // the left tree contains bitmaps so i need to resize the right one - if(m_bFirstTime) - { - m_pCTRL_RIGHT->SetReadOnly(); // sets autoinc to readonly - m_pCTRL_RIGHT->SetEntryHeight(m_pCTRL_LEFT->GetEntryHeight()); - m_pCTRL_RIGHT->SetIndent(m_pCTRL_LEFT->GetIndent()); - m_pCTRL_RIGHT->SetSpaceBetweenEntries(m_pCTRL_LEFT->GetSpaceBetweenEntries()); - - m_bFirstTime = false; - } - + m_bFirstTime = false; } void OWizNameMatching::ActivatePage( ) { - // set source table name OUString aName = m_sSourceText + m_pParent->m_sSourceName; - m_pTABLE_LEFT->SetText(aName); + m_xTABLE_LEFT->set_label(aName); // set dest table name aName = m_sDestText + m_pParent->m_sName; - m_pTABLE_RIGHT->SetText(aName); + m_xTABLE_RIGHT->set_label(aName); - m_pCTRL_LEFT->FillListBox(m_pParent->getSrcVector()); - m_pCTRL_RIGHT->FillListBox(m_pParent->getDestVector()); + FillListBox(*m_xCTRL_LEFT, m_pParent->getSrcVector(), true); + FillListBox(*m_xCTRL_RIGHT, m_pParent->getDestVector(), false); - m_pColumn_up->Enable( m_pCTRL_LEFT->GetEntryCount() > 1 ); - m_pColumn_down->Enable( m_pCTRL_LEFT->GetEntryCount() > 1 ); + m_xColumn_up->set_sensitive( m_xCTRL_LEFT->n_children() > 1 ); + m_xColumn_down->set_sensitive( m_xCTRL_LEFT->n_children() > 1 ); - m_pColumn_up_right->Enable( m_pCTRL_RIGHT->GetEntryCount() > 1 ); - m_pColumn_down_right->Enable( m_pCTRL_RIGHT->GetEntryCount() > 1 ); + m_xColumn_up_right->set_sensitive( m_xCTRL_RIGHT->n_children() > 1 ); + m_xColumn_down_right->set_sensitive( m_xCTRL_RIGHT->n_children() > 1 ); m_pParent->EnableNextButton(false); - m_pCTRL_LEFT->GrabFocus(); + m_xCTRL_LEFT->grab_focus(); + TableListClickHdl(*m_xCTRL_LEFT); } bool OWizNameMatching::LeavePage() @@ -144,12 +113,15 @@ bool OWizNameMatching::LeavePage() m_pParent->m_vColumnPositions.resize( rSrcColumns.size(), ODatabaseExport::TPositions::value_type( COLUMN_POSITION_NOT_FOUND, COLUMN_POSITION_NOT_FOUND ) ); m_pParent->m_vColumnTypes.resize( rSrcColumns.size(), COLUMN_POSITION_NOT_FOUND ); + std::unique_ptr<weld::TreeIter> xLeftEntry = m_xCTRL_LEFT->make_iterator(); + std::unique_ptr<weld::TreeIter> xRightEntry = m_xCTRL_RIGHT->make_iterator(); + sal_Int32 nParamPos = 0; - SvTreeListEntry* pLeftEntry = m_pCTRL_LEFT->GetModel()->First(); - SvTreeListEntry* pRightEntry = m_pCTRL_RIGHT->GetModel()->First(); - while(pLeftEntry && pRightEntry) + bool bLeftEntry = m_xCTRL_LEFT->get_iter_first(*xLeftEntry); + bool bRightEntry = m_xCTRL_RIGHT->get_iter_first(*xRightEntry); + while (bLeftEntry && bRightEntry) { - OFieldDescription* pSrcField = static_cast<OFieldDescription*>(pLeftEntry->GetUserData()); + OFieldDescription* pSrcField = reinterpret_cast<OFieldDescription*>(m_xCTRL_LEFT->get_id(*xLeftEntry).toInt64()); OSL_ENSURE(pSrcField,"OWizNameMatching: OColumn can not be null!"); sal_Int32 nPos = 0; @@ -160,9 +132,9 @@ bool OWizNameMatching::LeavePage() ++nPos; } - if(m_pCTRL_LEFT->GetCheckButtonState(pLeftEntry) == SvButtonState::Checked) + if (m_xCTRL_LEFT->get_toggle(*xLeftEntry, 0) == TRISTATE_TRUE) { - OFieldDescription* pDestField = static_cast<OFieldDescription*>(pRightEntry->GetUserData()); + OFieldDescription* pDestField = reinterpret_cast<OFieldDescription*>(m_xCTRL_RIGHT->get_id(*xRightEntry).toInt64()); OSL_ENSURE(pDestField,"OWizNameMatching: OColumn can not be null!"); const ODatabaseExport::TColumnVector& rDestColumns = m_pParent->getDestVector(); sal_Int32 nPosDest = 1; @@ -203,8 +175,8 @@ bool OWizNameMatching::LeavePage() m_pParent->m_vColumnPositions[nPos].second = COLUMN_POSITION_NOT_FOUND; } - pLeftEntry = m_pCTRL_LEFT->GetModel()->Next(pLeftEntry); - pRightEntry = m_pCTRL_RIGHT->GetModel()->Next(pRightEntry); + bLeftEntry = m_xCTRL_LEFT->iter_next(*xLeftEntry); + bRightEntry = m_xCTRL_RIGHT->iter_next(*xRightEntry); } return true; @@ -212,199 +184,145 @@ bool OWizNameMatching::LeavePage() OUString OWizNameMatching::GetTitle() const { return DBA_RES(STR_WIZ_NAME_MATCHING_TITEL); } -IMPL_LINK( OWizNameMatching, ButtonClickHdl, Button *, pButton, void ) +IMPL_LINK(OWizNameMatching, ButtonClickHdl, weld::Button&, rButton, void) { - SvTreeListEntry* pEntry = m_pCTRL_LEFT->FirstSelected(); - if ( pEntry ) - { - sal_Int32 nPos = m_pCTRL_LEFT->GetModel()->GetAbsPos(pEntry); - if(pButton == m_pColumn_up && nPos) - --nPos; - else if(pButton == m_pColumn_down) - nPos += 2; + int nPos = m_xCTRL_LEFT->get_selected_index(); + if (nPos == -1) + return; - m_pCTRL_LEFT->ModelIsMoving(pEntry,nullptr,nPos); - m_pCTRL_LEFT->GetModel()->Move(pEntry,nullptr,nPos); - m_pCTRL_LEFT->ModelHasMoved(pEntry); + int nOrigPos = nPos; + if (&rButton == m_xColumn_up.get() && nPos) + --nPos; + else if (&rButton == m_xColumn_down.get() && nPos < m_xCTRL_LEFT->n_children() - 1) + ++nPos; - long nThumbPos = m_pCTRL_LEFT->GetVScroll()->GetThumbPos(); - long nVisibleSize = m_pCTRL_LEFT->GetVScroll()->GetVisibleSize(); + m_xCTRL_LEFT->swap(nOrigPos, nPos); - if(pButton == m_pColumn_down && (nThumbPos+nVisibleSize+1) < nPos) - { - m_pCTRL_LEFT->GetVScroll()->DoScrollAction(ScrollType::LineDown); - } + m_xCTRL_LEFT->scroll_to_row(nPos); - TableListClickHdl(m_pCTRL_LEFT); - } + TableListClickHdl(*m_xCTRL_LEFT); +} + +IMPL_LINK( OWizNameMatching, RightButtonClickHdl, weld::Button&, rButton, void ) +{ + int nPos = m_xCTRL_RIGHT->get_selected_index(); + if (nPos == -1) + return; + + int nOrigPos = nPos; + if (&rButton == m_xColumn_up_right.get() && nPos) + --nPos; + else if (&rButton == m_xColumn_down_right.get() && nPos < m_xCTRL_RIGHT->n_children() - 1) + ++nPos; + + m_xCTRL_RIGHT->swap(nOrigPos, nPos); + + m_xCTRL_RIGHT->scroll_to_row(nPos); + + TableListRightSelectHdl(*m_xCTRL_RIGHT); } -IMPL_LINK( OWizNameMatching, RightButtonClickHdl, Button *, pButton, void ) +namespace { - SvTreeListEntry* pEntry = m_pCTRL_RIGHT->FirstSelected(); - if ( pEntry ) + int GetFirstEntryInView(weld::TreeView& rTreeView) { - sal_Int32 nPos = m_pCTRL_RIGHT->GetModel()->GetAbsPos(pEntry); - if(pButton == m_pColumn_up_right && nPos) - --nPos; - else if(pButton == m_pColumn_down_right) - nPos += 2; - - m_pCTRL_RIGHT->ModelIsMoving(pEntry,nullptr,nPos); - m_pCTRL_RIGHT->GetModel()->Move(pEntry,nullptr,nPos); - m_pCTRL_RIGHT->ModelHasMoved(pEntry); - long nThumbPos = m_pCTRL_RIGHT->GetVScroll()->GetThumbPos(); - long nVisibleSize = m_pCTRL_RIGHT->GetVScroll()->GetVisibleSize(); - - if(pButton == m_pColumn_down_right && (nThumbPos+nVisibleSize+1) < nPos) - m_pCTRL_RIGHT->GetVScroll()->DoScrollAction(ScrollType::LineDown); - TableListRightSelectHdl(m_pCTRL_RIGHT); + int nFirstEntryInView = -1; + + rTreeView.visible_foreach([&nFirstEntryInView, &rTreeView](weld::TreeIter& rEntry){ + nFirstEntryInView = rTreeView.get_iter_index_in_parent(rEntry); + // stop after first entry + return true; + }); + + return nFirstEntryInView; } } -IMPL_LINK_NOARG( OWizNameMatching, TableListClickHdl, SvTreeListBox*, void ) +IMPL_LINK_NOARG(OWizNameMatching, TableListClickHdl, weld::TreeView&, void) { - SvTreeListEntry* pEntry = m_pCTRL_LEFT->FirstSelected(); - if(pEntry) + int nPos = m_xCTRL_LEFT->get_selected_index(); + if (nPos != -1) { - sal_uLong nPos = m_pCTRL_LEFT->GetModel()->GetAbsPos(pEntry); - SvTreeListEntry* pOldEntry = m_pCTRL_RIGHT->FirstSelected(); - if(pOldEntry && nPos != m_pCTRL_RIGHT->GetModel()->GetAbsPos(pOldEntry)) + int nOldEntry = m_xCTRL_RIGHT->get_selected_index(); + if (nOldEntry != -1 && nPos != nOldEntry) { - if(pOldEntry) - m_pCTRL_RIGHT->Select(pOldEntry,false); - pOldEntry = m_pCTRL_RIGHT->GetEntry(nPos); - if(pOldEntry) + m_xCTRL_RIGHT->unselect(nOldEntry); + if (nPos < m_xCTRL_RIGHT->n_children()) { - sal_uLong nNewPos = m_pCTRL_LEFT->GetModel()->GetAbsPos(m_pCTRL_LEFT->GetFirstEntryInView()); + int nNewPos = GetFirstEntryInView(*m_xCTRL_LEFT); if ( nNewPos - nPos == 1 ) --nNewPos; - m_pCTRL_RIGHT->MakeVisible(m_pCTRL_RIGHT->GetEntry(nNewPos), true); - m_pCTRL_RIGHT->Select(pOldEntry); + m_xCTRL_RIGHT->scroll_to_row(nNewPos); + m_xCTRL_RIGHT->select(nPos); } } - else if(!pOldEntry) + else if (nOldEntry == -1) { - pOldEntry = m_pCTRL_RIGHT->GetEntry(nPos); - if(pOldEntry) - { - m_pCTRL_RIGHT->Select(pOldEntry); - } + if (nPos < m_xCTRL_RIGHT->n_children()) + m_xCTRL_RIGHT->select(nPos); } } } -IMPL_LINK_NOARG( OWizNameMatching, TableListRightSelectHdl, SvTreeListBox*, void ) +IMPL_LINK_NOARG( OWizNameMatching, TableListRightSelectHdl, weld::TreeView&, void ) { - SvTreeListEntry* pEntry = m_pCTRL_RIGHT->FirstSelected(); - if(pEntry) + int nPos = m_xCTRL_RIGHT->get_selected_index(); + if (nPos != -1) { - sal_uLong nPos = m_pCTRL_RIGHT->GetModel()->GetAbsPos(pEntry); - SvTreeListEntry* pOldEntry = m_pCTRL_LEFT->FirstSelected(); - if(pOldEntry && nPos != m_pCTRL_LEFT->GetModel()->GetAbsPos(pOldEntry)) + OFieldDescription* pColumn = reinterpret_cast<OFieldDescription*>(m_xCTRL_RIGHT->get_id(nPos).toInt64()); + if (pColumn->IsAutoIncrement()) { - if(pOldEntry) - m_pCTRL_LEFT->Select(pOldEntry,false); - pOldEntry = m_pCTRL_LEFT->GetEntry(nPos); - if(pOldEntry) + m_xCTRL_RIGHT->unselect(nPos); + return; + } + + int nOldEntry = m_xCTRL_LEFT->get_selected_index(); + if (nOldEntry != -1 && nPos != nOldEntry) + { + m_xCTRL_LEFT->unselect(nOldEntry); + if (nPos < m_xCTRL_LEFT->n_children()) { - sal_uLong nNewPos = m_pCTRL_RIGHT->GetModel()->GetAbsPos(m_pCTRL_RIGHT->GetFirstEntryInView()); + int nNewPos = GetFirstEntryInView(*m_xCTRL_RIGHT); if ( nNewPos - nPos == 1 ) nNewPos--; - m_pCTRL_LEFT->MakeVisible(m_pCTRL_LEFT->GetEntry(nNewPos), true); - m_pCTRL_LEFT->Select(pOldEntry); + m_xCTRL_LEFT->scroll_to_row(nNewPos); + m_xCTRL_LEFT->select(nPos); } } - else if(!pOldEntry) + else if (nOldEntry == -1) { - pOldEntry = m_pCTRL_LEFT->GetEntry(nPos); - if(pOldEntry) - { - m_pCTRL_LEFT->Select(pOldEntry); - } + if (nPos < m_xCTRL_LEFT->n_children()) + m_xCTRL_LEFT->select(nPos); } } } -IMPL_LINK( OWizNameMatching, AllNoneClickHdl, Button *, pButton, void ) +IMPL_LINK(OWizNameMatching, AllNoneClickHdl, weld::Button&, rButton, void) { - bool bAll = pButton == m_pAll; - SvTreeListEntry* pEntry = m_pCTRL_LEFT->First(); - while(pEntry) - { - m_pCTRL_LEFT->SetCheckButtonState( pEntry, bAll ? SvButtonState::Checked : SvButtonState::Unchecked); - pEntry = m_pCTRL_LEFT->Next(pEntry); - } + bool bAll = &rButton == m_xAll.get(); + m_xCTRL_LEFT->all_foreach([this, bAll](weld::TreeIter& rEntry){ + m_xCTRL_LEFT->set_toggle(rEntry, bAll ? TRISTATE_TRUE : TRISTATE_FALSE, 0); + return false; + }); } -// class OColumnString -class OColumnString : public SvLBoxString +void OWizNameMatching::FillListBox(weld::TreeView& rTreeView, const ODatabaseExport::TColumnVector& rList, bool bCheckButtons) { - bool m_bReadOnly; -public: - OColumnString( const OUString& rStr, bool RO ) - :SvLBoxString(rStr) - ,m_bReadOnly(RO) - { - } + rTreeView.clear(); - virtual void Paint(const Point& rPos, SvTreeListBox& rDev, vcl::RenderContext& rRenderContext, - const SvViewDataEntry* pView, const SvTreeListEntry& rEntry) override; -}; + int nRow(0); -void OColumnString::Paint(const Point& rPos, SvTreeListBox& /*rDev*/, vcl::RenderContext& rRenderContext, - const SvViewDataEntry* /*pView*/, const SvTreeListEntry& /*rEntry*/) -{ - rRenderContext.Push(PushFlags::TEXTCOLOR | PushFlags::TEXTFILLCOLOR); - if(m_bReadOnly) + for (auto const& elem : rList) { - const StyleSettings& rStyleSettings = rRenderContext.GetSettings().GetStyleSettings(); - rRenderContext.SetTextColor(rStyleSettings.GetDisableColor()); - rRenderContext.SetTextFillColor(rStyleSettings.GetFieldColor()); - } - rRenderContext.DrawText(rPos, GetText()); - rRenderContext.Pop(); -} - -OColumnTreeBox::OColumnTreeBox( vcl::Window* pParent ) - : OMarkableTreeListBox(pParent, WB_BORDER) - , m_bReadOnly(false) -{ - SetDragDropMode( DragDropMode::NONE ); - EnableInplaceEditing( false ); - SetStyle(GetStyle() | WB_BORDER | WB_HASBUTTONS | WB_HSCROLL ); - SetSelectionMode( SelectionMode::Single ); -} - -VCL_BUILDER_FACTORY(OColumnTreeBox) - -void OColumnTreeBox::InitEntry(SvTreeListEntry* pEntry, const OUString& rStr, const Image& rImg1, const Image& rImg2) -{ - DBTreeListBox::InitEntry(pEntry, rStr, rImg1, rImg2); - pEntry->ReplaceItem(std::make_unique<OColumnString>(rStr,false), pEntry->ItemCount() - 1); -} - -bool OColumnTreeBox::Select( SvTreeListEntry* pEntry, bool bSelect ) -{ - if(bSelect) - { - OFieldDescription* pColumn = static_cast<OFieldDescription*>(pEntry->GetUserData()); - if(!(pColumn->IsAutoIncrement() && m_bReadOnly)) - bSelect = DBTreeListBox::Select( pEntry,bSelect ); - } - else - bSelect = DBTreeListBox::Select( pEntry,bSelect ); - return bSelect; -} - -void OColumnTreeBox::FillListBox( const ODatabaseExport::TColumnVector& _rList) -{ - Clear(); - for (auto const& elem : _rList) - { - SvTreeListEntry* pEntry = InsertEntry(elem->first, nullptr, false, TREELIST_APPEND, elem->second); - SvButtonState eState = !(m_bReadOnly && elem->second->IsAutoIncrement()) ? SvButtonState::Checked : SvButtonState::Unchecked; - SetCheckButtonState( pEntry, eState ); + rTreeView.append(); + if (bCheckButtons) + { + bool bChecked = !elem->second->IsAutoIncrement(); + rTreeView.set_toggle(nRow, bChecked ? TRISTATE_TRUE : TRISTATE_FALSE, 0); + } + rTreeView.set_text(nRow, elem->first); + rTreeView.set_id(nRow, OUString::number(reinterpret_cast<sal_Int64>(elem->second))); + ++nRow; } } diff --git a/dbaccess/source/ui/misc/WTypeSelect.cxx b/dbaccess/source/ui/misc/WTypeSelect.cxx index 29144469ad6f..06fcf50d0a46 100644 --- a/dbaccess/source/ui/misc/WTypeSelect.cxx +++ b/dbaccess/source/ui/misc/WTypeSelect.cxx @@ -44,10 +44,10 @@ using namespace ::com::sun::star::util; using namespace ::com::sun::star::sdbc; // OWizTypeSelectControl -OWizTypeSelectControl::OWizTypeSelectControl(vcl::Window* pParent, vcl::Window* pParentTabPage) +OWizTypeSelectControl::OWizTypeSelectControl(TabPageParent pParent, OWizTypeSelect* pParentTabPage) : OFieldDescControl(pParent, nullptr) + , m_xParentTabPage(pParentTabPage) { - m_pParentTabPage = pParentTabPage; } OWizTypeSelectControl::~OWizTypeSelectControl() @@ -57,7 +57,7 @@ OWizTypeSelectControl::~OWizTypeSelectControl() void OWizTypeSelectControl::dispose() { - m_pParentTabPage.clear(); + m_xParentTabPage.clear(); OFieldDescControl::dispose(); } @@ -93,12 +93,12 @@ void OWizTypeSelectControl::CellModified(long nRow, sal_uInt16 nColId ) { OSL_ENSURE(nRow == -1,"nRow must be -1!"); - MultiListBox *pListBox = static_cast<OWizTypeSelect*>(m_pParentTabPage.get())->m_pColumnNames; + weld::TreeView* pListBox = m_xParentTabPage->m_xColumnNames->GetWidget(); OFieldDescription* pCurFieldDescr = getCurrentFieldDescData(); - const sal_Int32 nPos = pListBox->GetEntryPos( pCurFieldDescr->GetName() ); - pCurFieldDescr = static_cast< OFieldDescription* >( pListBox->GetEntryData( nPos ) ); + const sal_Int32 nPos = pListBox->find_text(pCurFieldDescr->GetName()); + pCurFieldDescr = reinterpret_cast< OFieldDescription* >( pListBox->get_id(nPos).toInt64() ); OSL_ENSURE( pCurFieldDescr, "OWizTypeSelectControl::CellModified: Columnname/type not found in the listbox!" ); if ( !pCurFieldDescr ) return; @@ -108,23 +108,23 @@ void OWizTypeSelectControl::CellModified(long nRow, sal_uInt16 nColId ) OUString sNewName; const OPropColumnEditCtrl* pColumnName = getColumnCtrl(); if ( pColumnName ) - sNewName = pColumnName->GetText(); + sNewName = pColumnName->get_text(); switch(nColId) { case FIELD_PROPERTY_COLUMNNAME: { - OCopyTableWizard* pWiz = static_cast<OCopyTableWizard*>(GetParentDialog()); + OCopyTableWizard* pWiz = m_xParentTabPage->m_pParent; // first we have to check if this name already exists bool bDoubleName = false; bool bCase = true; if ( getMetaData().is() && !getMetaData()->supportsMixedCaseQuotedIdentifiers() ) { bCase = false; - const sal_Int32 nCount = pListBox->GetEntryCount(); + const sal_Int32 nCount = pListBox->n_children(); for (sal_Int32 i=0 ; !bDoubleName && i < nCount ; ++i) { - OUString sEntry(pListBox->GetEntry(i)); + OUString sEntry(pListBox->get_text(i)); bDoubleName = sNewName.equalsIgnoreAsciiCase(sEntry); } if ( !bDoubleName && pWiz->shouldCreatePrimaryKey() ) @@ -132,7 +132,7 @@ void OWizTypeSelectControl::CellModified(long nRow, sal_uInt16 nColId ) } else - bDoubleName = ((pListBox->GetEntryPos(sNewName) != LISTBOX_ENTRY_NOTFOUND) + bDoubleName = ((pListBox->find_text(sNewName) != -1) || ( pWiz->shouldCreatePrimaryKey() && pWiz->getPrimaryKeyName() == sNewName) ); @@ -143,13 +143,13 @@ void OWizTypeSelectControl::CellModified(long nRow, sal_uInt16 nColId ) pWiz->showError(strMessage); pCurFieldDescr->SetName(sName); DisplayData(pCurFieldDescr); - static_cast<OWizTypeSelect*>(m_pParentTabPage.get())->setDuplicateName(true); + m_xParentTabPage->setDuplicateName(true); return; } OUString sOldName = pCurFieldDescr->GetName(); pCurFieldDescr->SetName(sNewName); - static_cast<OWizTypeSelect*>(m_pParentTabPage.get())->setDuplicateName(false); + m_xParentTabPage->setDuplicateName(false); // now we change the name @@ -163,9 +163,9 @@ void OWizTypeSelectControl::CellModified(long nRow, sal_uInt16 nColId ) } } - pListBox->RemoveEntry(nPos); - pListBox->InsertEntry(pCurFieldDescr->GetName(),nPos); - pListBox->SetEntryData(nPos,pCurFieldDescr); + pListBox->remove(nPos); + pListBox->insert_text(nPos, pCurFieldDescr->GetName()); + pListBox->set_id(nPos, OUString::number(reinterpret_cast<sal_Int64>(pCurFieldDescr))); pWiz->replaceColumn(nPos,pCurFieldDescr,sOldName); } @@ -176,75 +176,74 @@ void OWizTypeSelectControl::CellModified(long nRow, sal_uInt16 nColId ) css::lang::Locale OWizTypeSelectControl::GetLocale() const { - return static_cast<OWizTypeSelect*>(m_pParentTabPage.get())->m_pParent->GetLocale(); + return m_xParentTabPage->m_pParent->GetLocale(); } Reference< XNumberFormatter > OWizTypeSelectControl::GetFormatter() const { - return static_cast<OWizTypeSelect*>(m_pParentTabPage.get())->m_pParent->GetFormatter(); + return m_xParentTabPage->m_pParent->GetFormatter(); } TOTypeInfoSP OWizTypeSelectControl::getTypeInfo(sal_Int32 _nPos) { - return static_cast<OWizTypeSelect*>(m_pParentTabPage.get())->m_pParent->getDestTypeInfo(_nPos); + return m_xParentTabPage->m_pParent->getDestTypeInfo(_nPos); } const OTypeInfoMap* OWizTypeSelectControl::getTypeInfo() const { - return &static_cast<OWizTypeSelect*>(m_pParentTabPage.get())->m_pParent->getDestTypeInfo(); + return &m_xParentTabPage->m_pParent->getDestTypeInfo(); } css::uno::Reference< css::sdbc::XDatabaseMetaData> OWizTypeSelectControl::getMetaData() { - return static_cast<OWizTypeSelect*>(m_pParentTabPage.get())->m_pParent->m_xDestConnection->getMetaData(); + return m_xParentTabPage->m_pParent->m_xDestConnection->getMetaData(); } css::uno::Reference< css::sdbc::XConnection> OWizTypeSelectControl::getConnection() { - return static_cast<OWizTypeSelect*>(m_pParentTabPage.get())->m_pParent->m_xDestConnection; + return m_xParentTabPage->m_pParent->m_xDestConnection; } bool OWizTypeSelectControl::isAutoIncrementValueEnabled() const { - return static_cast<OWizTypeSelect*>(m_pParentTabPage.get())->m_bAutoIncrementEnabled; + return m_xParentTabPage->m_bAutoIncrementEnabled; } OUString OWizTypeSelectControl::getAutoIncrementValue() const { - return static_cast<OWizTypeSelect*>(m_pParentTabPage.get())->m_sAutoIncrementValue; + return m_xParentTabPage->m_sAutoIncrementValue; } -OWizTypeSelect::OWizTypeSelect( vcl::Window* pParent, SvStream* _pStream ) - :OWizardPage( pParent, "TypeSelect", "dbaccess/ui/typeselectpage.ui") - ,m_pTypeControl(VclPtr<OWizTypeSelectControl>::Create(get<VclVBox>("control_container"), this) ) - ,m_pParserStream( _pStream ) - ,m_nDisplayRow(0) - ,m_bAutoIncrementEnabled(false) - ,m_bDuplicateName(false) +OWizTypeSelect::OWizTypeSelect(OCopyTableWizard* pWizard, TabPageParent pParent, SvStream* pStream) + : OWizardPage(pWizard, pParent, "dbaccess/ui/typeselectpage.ui", "TypeSelect") + , m_xColumnNames(new OWizTypeSelectList(m_xBuilder->weld_tree_view("columnnames"))) + , m_xColumns(m_xBuilder->weld_label("columns")) + , m_xControlContainer(m_xBuilder->weld_container("control_container")) + , m_xTypeControl(VclPtr<OWizTypeSelectControl>::Create(TabPageParent(m_xControlContainer.get(), pWizard), this)) + , m_xAutoType(m_xBuilder->weld_label("autotype")) + , m_xAutoFt(m_xBuilder->weld_label("autolabel")) + , m_xAutoEt(m_xBuilder->weld_spin_button("auto")) + , m_xAutoPb(m_xBuilder->weld_button("autobutton")) + , m_pParserStream(pStream) + , m_nDisplayRow(0) + , m_bAutoIncrementEnabled(false) + , m_bDuplicateName(false) { - get(m_pColumnNames, "columnnames"); - m_pColumnNames->SetParentTabPage(this); - get(m_pColumns, "columns"); - get(m_pAutoType, "autotype"); - get(m_pAutoFt, "autolabel"); - get(m_pAutoEt, "auto"); - get(m_pAutoPb, "autobutton"); + m_xColumnNames->SetParentTabPage(this); - m_pColumnNames->SetSelectHdl(LINK(this,OWizTypeSelect,ColumnSelectHdl)); + m_xColumnNames->connect_changed(LINK(this,OWizTypeSelect,ColumnSelectHdl)); - m_imgPKey = Image(StockImage::Yes, BMP_PRIMARY_KEY); + m_xTypeControl->Show(); + m_xTypeControl->Init(); - m_pTypeControl->Show(); - m_pTypeControl->Init(); - - m_pAutoEt->SetText("10"); - m_pAutoEt->SetDecimalDigits(0); - m_pAutoPb->SetClickHdl(LINK(this,OWizTypeSelect,ButtonClickHdl)); - m_pColumnNames->EnableMultiSelection(true); + m_xAutoEt->set_text("10"); + m_xAutoEt->set_digits(0); + m_xAutoPb->connect_clicked(LINK(this,OWizTypeSelect,ButtonClickHdl)); + m_xColumnNames->set_selection_mode(SelectionMode::Multiple); try { - m_pColumnNames->SetPKey( m_pParent->supportsPrimaryKey() ); + m_xColumnNames->SetPKey( m_pParent->supportsPrimaryKey() ); ::dbaui::fillAutoIncrementValue( m_pParent->m_xDestConnection, m_bAutoIncrementEnabled, m_sAutoIncrementValue ); } catch(const Exception&) @@ -260,13 +259,7 @@ OWizTypeSelect::~OWizTypeSelect() void OWizTypeSelect::dispose() { - m_pTypeControl.disposeAndClear(); - m_pColumnNames.clear(); - m_pColumns.clear(); - m_pAutoType.clear(); - m_pAutoFt.clear(); - m_pAutoEt.clear(); - m_pAutoPb.clear(); + m_xTypeControl.disposeAndClear(); OWizardPage::dispose(); } @@ -275,34 +268,30 @@ OUString OWizTypeSelect::GetTitle() const return DBA_RES(STR_WIZ_TYPE_SELECT_TITEL); } -IMPL_LINK_NOARG( OWizTypeSelect, ColumnSelectHdl, ListBox&, void ) +IMPL_LINK_NOARG(OWizTypeSelect, ColumnSelectHdl, weld::TreeView&, void) { - OUString aColumnName( m_pColumnNames->GetSelectedEntry() ); - - OFieldDescription* pField = static_cast<OFieldDescription*>(m_pColumnNames->GetEntryData(m_pColumnNames->GetEntryPos(aColumnName))); - if(pField) - m_pTypeControl->DisplayData(pField); + OFieldDescription* pField = reinterpret_cast<OFieldDescription*>(m_xColumnNames->get_selected_id().toInt64()); + if (pField) + m_xTypeControl->DisplayData(pField); - m_pTypeControl->Enable(m_pColumnNames->GetSelectedEntryCount() == 1 ); + m_xTypeControl->Enable(m_xColumnNames->count_selected_rows() == 1); } void OWizTypeSelect::Reset() { // restore original state - - while(m_pColumnNames->GetEntryCount()) - m_pColumnNames->RemoveEntry(0); - m_pColumnNames->Clear(); - sal_Int32 nBreakPos; + m_xColumnNames->clear(); + sal_Int32 nCount(0), nBreakPos; m_pParent->CheckColumns(nBreakPos); const ODatabaseExport::TColumnVector& rDestColumns = m_pParent->getDestVector(); for (auto const& column : rDestColumns) { - const sal_Int32 nPos = column->second->IsPrimaryKey() - ? m_pColumnNames->InsertEntry(column->first, m_imgPKey ) - : m_pColumnNames->InsertEntry(column->first); - m_pColumnNames->SetEntryData(nPos,column->second); + OUString sId(OUString::number(reinterpret_cast<sal_Int64>(column->second))); + m_xColumnNames->append(sId, column->first); + if (column->second->IsPrimaryKey()) + m_xColumnNames->set_image(nCount, BMP_PRIMARY_KEY); + ++nCount; } m_bFirstTime = false; } @@ -313,20 +302,18 @@ void OWizTypeSelect::ActivatePage( ) Reset(); m_bFirstTime = bOldFirstTime; - m_pColumnNames->SelectEntryPos(static_cast<sal_uInt16>(m_nDisplayRow)); + m_xColumnNames->select(m_nDisplayRow); m_nDisplayRow = 0; - m_pColumnNames->GetSelectHdl().Call(*m_pColumnNames); + ColumnSelectHdl(*m_xColumnNames->GetWidget()); } bool OWizTypeSelect::LeavePage() { - OUString aColumnName( m_pColumnNames->GetSelectedEntry() ); - bool bDuplicateName = false; - OFieldDescription* pField = static_cast<OFieldDescription*>(m_pColumnNames->GetEntryData(m_pColumnNames->GetEntryPos(aColumnName))); + OFieldDescription* pField = reinterpret_cast<OFieldDescription*>(m_xColumnNames->get_selected_id().toInt64()); if ( pField ) { - m_pTypeControl->SaveData(pField); + m_xTypeControl->SaveData(pField); bDuplicateName = m_bDuplicateName; } return !bDuplicateName; @@ -334,19 +321,19 @@ bool OWizTypeSelect::LeavePage() void OWizTypeSelect::EnableAuto(bool bEnable) { - m_pAutoFt->Show(bEnable); - m_pAutoEt->Show(bEnable); - m_pAutoPb->Show(bEnable); - m_pAutoType->Show(bEnable); + m_xAutoFt->set_visible(bEnable); + m_xAutoEt->set_visible(bEnable); + m_xAutoPb->set_visible(bEnable); + m_xAutoType->set_visible(bEnable); } -IMPL_LINK_NOARG( OWizTypeSelect, ButtonClickHdl, Button *, void ) +IMPL_LINK_NOARG(OWizTypeSelect, ButtonClickHdl, weld::Button&, void) { sal_Int32 nBreakPos; m_pParent->CheckColumns(nBreakPos); // fill column list - sal_uInt32 nRows = m_pAutoEt->GetText().toInt32(); + sal_uInt32 nRows = m_xAutoEt->get_text().toInt32(); if(m_pParserStream) { sal_uInt64 const nTell = m_pParserStream->Tell(); // might change seek position of stream @@ -358,24 +345,24 @@ IMPL_LINK_NOARG( OWizTypeSelect, ButtonClickHdl, Button *, void ) ActivatePage(); } -OWizTypeSelectList::~OWizTypeSelectList() +OWizTypeSelectList::OWizTypeSelectList(std::unique_ptr<weld::TreeView> xControl) + : m_xControl(std::move(xControl)) + , m_bPKey(false) + , m_xParentTabPage(nullptr) { - disposeOnce(); -} - -void OWizTypeSelectList::dispose() -{ - m_pParentTabPage.clear(); - MultiListBox::dispose(); + m_xControl->connect_popup_menu(LINK(this, OWizTypeSelectList, CommandHdl)); } bool OWizTypeSelectList::IsPrimaryKeyAllowed() const { - const sal_Int32 nCount = GetSelectedEntryCount(); + auto aRows = m_xControl->get_selected_rows(); + std::sort(aRows.begin(), aRows.end()); + + const sal_Int32 nCount = aRows.size(); for( sal_Int32 j = 0; m_bPKey && j < nCount; ++j ) { - OFieldDescription* pField = static_cast<OFieldDescription*>(GetEntryData(GetSelectedEntryPos(j))); + OFieldDescription* pField = reinterpret_cast<OFieldDescription*>(m_xControl->get_id(aRows[j]).toInt64()); if(!pField || pField->getTypeInfo()->nSearchType == ColumnSearch::NONE) return false; } @@ -384,96 +371,71 @@ bool OWizTypeSelectList::IsPrimaryKeyAllowed() const void OWizTypeSelectList::setPrimaryKey(OFieldDescription* _pFieldDescr, sal_uInt16 _nPos, bool _bSet) { - OUString sColumnName = GetEntry(_nPos); - RemoveEntry(_nPos); _pFieldDescr->SetPrimaryKey(_bSet); if( _bSet ) - InsertEntry(sColumnName, static_cast<OWizTypeSelect*>(m_pParentTabPage.get())->m_imgPKey,_nPos); + { + OUString sImage(BMP_PRIMARY_KEY); + m_xControl->set_image(_nPos, sImage); + } else if( _pFieldDescr->getTypeInfo()->bNullable ) { _pFieldDescr->SetControlDefault(Any()); - InsertEntry(sColumnName,_nPos); + m_xControl->set_image(_nPos, OUString()); } - SetEntryData(_nPos,_pFieldDescr); } -VCL_BUILDER_FACTORY(OWizTypeSelectList) - -bool OWizTypeSelectList::PreNotify( NotifyEvent& rEvt ) +IMPL_LINK(OWizTypeSelectList, CommandHdl, const CommandEvent&, rCEvt, bool) { - bool bDone = false; - switch( rEvt.GetType() ) + if (rCEvt.GetCommand() != CommandEventId::ContextMenu) + return false; + if (!IsPrimaryKeyAllowed()) + return false; + + std::unique_ptr<weld::Builder> xBuilder(Application::CreateBuilder(m_xControl.get(), "dbaccess/ui/keymenu.ui")); + auto xContextMenu = xBuilder->weld_menu("menu"); + // Should primary key checkbox be checked? + const sal_Int32 nCount = m_xControl->n_children(); + bool bCheckOk = false; + for(sal_Int32 j = 0 ; j < nCount ; ++j) { - case MouseNotifyEvent::MOUSEBUTTONDOWN: + OFieldDescription* pFieldDescr = reinterpret_cast<OFieldDescription*>(m_xControl->get_id(j).toInt64()); + // if at least one of the fields is selected but not in the primary key, + // or is in the primary key but not selected, then don't check the + // primary key checkbox. + if( pFieldDescr && pFieldDescr->IsPrimaryKey() != m_xControl->is_selected(j) ) { - const MouseEvent* pMEvt = rEvt.GetMouseEvent(); - if(pMEvt->IsRight() && !pMEvt->GetModifier()) - bDone = true; - } + bCheckOk = false; break; - case MouseNotifyEvent::COMMAND: + } + if (!bCheckOk && m_xControl->is_selected(j)) + bCheckOk = true; + } + + if (bCheckOk) + xContextMenu->set_active("primarykey", true); + + OString sCommand(xContextMenu->popup_at_rect(m_xControl.get(), tools::Rectangle(rCEvt.GetMousePosPixel(), Size(1,1)))); + if (sCommand == "primarykey") + { + for (sal_Int32 j = 0 ; j < nCount; ++j) { - if(!IsPrimaryKeyAllowed()) - break; - - const CommandEvent* pComEvt = rEvt.GetCommandEvent(); - if(pComEvt->GetCommand() != CommandEventId::ContextMenu) - break; - // the place, at which was clicked - Point ptWhere(0,0); - if (pComEvt->IsMouseEvent()) - ptWhere = pComEvt->GetMousePosPixel(); - - VclBuilder aBuilder(nullptr, VclBuilderContainer::getUIRootDir(), "dbaccess/ui/keymenu.ui", ""); - VclPtr<PopupMenu> aContextMenu(aBuilder.get_menu("menu")); - // Should primary key checkbox be checked? - const sal_Int32 nCount = GetEntryCount(); - bool bCheckOk = false; - for(sal_Int32 j = 0 ; j < nCount ; ++j) + OFieldDescription* pFieldDescr = reinterpret_cast<OFieldDescription*>(m_xControl->get_id(j).toInt64()); + if (pFieldDescr) { - OFieldDescription* pFieldDescr = static_cast<OFieldDescription*>(GetEntryData(j)); - // if at least one of the fields is selected but not in the primary key, - // or is in the primary key but not selected, then don't check the - // primary key checkbox. - if( pFieldDescr && pFieldDescr->IsPrimaryKey() != IsEntryPosSelected(j) ) + if(!bCheckOk && m_xControl->is_selected(j)) { - bCheckOk = false; - break; + setPrimaryKey(pFieldDescr,j,true); } - if (!bCheckOk && IsEntryPosSelected(j)) - bCheckOk = true; - } - - if (bCheckOk) - aContextMenu->CheckItem("primarykey"); - - if (aContextMenu->Execute(this, ptWhere)) - { - for (sal_Int32 j = 0 ; j < nCount ; ++j) + else { - OFieldDescription* pFieldDescr = static_cast<OFieldDescription*>(GetEntryData(j)); - if( pFieldDescr ) - { - if(!bCheckOk && IsEntryPosSelected(j)) - { - setPrimaryKey(pFieldDescr,j,true); - SelectEntryPos(j); - } - else - { - setPrimaryKey(pFieldDescr,j); - } - } + setPrimaryKey(pFieldDescr,j); } - GetSelectHdl().Call(*this); } - bDone = true; } - break; - default: - break; + m_aChangeHdl.Call(*m_xControl); } - return bDone || MultiListBox::PreNotify(rEvt); + + return true; } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |