From acb76061eedfecbf0273cc953b5e8e0f03be4087 Mon Sep 17 00:00:00 2001 From: Kristian Bendiksen Date: Tue, 18 Jun 2024 09:27:34 +0200 Subject: [PATCH] #11496 OSDU well path import: add sorting and filter of wells. --- .../RiuWellImportWizard.cpp | 28 +++++++++++- .../OsduImportCommands/RiuWellImportWizard.h | 45 +++++++++++++++++++ 2 files changed, 71 insertions(+), 2 deletions(-) diff --git a/ApplicationLibCode/Commands/OsduImportCommands/RiuWellImportWizard.cpp b/ApplicationLibCode/Commands/OsduImportCommands/RiuWellImportWizard.cpp index 794900b3ef..14604fb167 100644 --- a/ApplicationLibCode/Commands/OsduImportCommands/RiuWellImportWizard.cpp +++ b/ApplicationLibCode/Commands/OsduImportCommands/RiuWellImportWizard.cpp @@ -263,6 +263,10 @@ FieldSelectionPage::FieldSelectionPage( RimWellPathImport* wellPathImport, RiaOs m_osduFieldsModel = new OsduFieldTableModel; m_tableView->setModel( m_osduFieldsModel ); + m_tableView->setSortingEnabled( true ); + int nameColumn = 2; + m_tableView->sortByColumn( nameColumn, Qt::AscendingOrder ); + layout->addWidget( m_tableView ); layout->setStretchFactor( m_tableView, 10 ); @@ -354,18 +358,38 @@ WellSelectionPage::WellSelectionPage( RimWellPathImport* wellPathImport, RiaOsdu QLabel* label = new QLabel( "Select wells" ); layout->addWidget( label ); + QHBoxLayout* filterLayout = new QHBoxLayout; + filterLayout->addWidget( new QLabel( "Filter:", this ) ); + QLineEdit* filterLineEdit = new QLineEdit( this ); + filterLayout->addWidget( filterLineEdit ); + + layout->addLayout( filterLayout ); + m_tableView = new QTableView( this ); m_tableView->setSelectionBehavior( QAbstractItemView::SelectRows ); m_tableView->setSelectionMode( QAbstractItemView::MultiSelection ); + m_tableView->setSortingEnabled( true ); + int nameColumn = 2; + m_tableView->sortByColumn( nameColumn, Qt::AscendingOrder ); + QHeaderView* header = m_tableView->horizontalHeader(); header->setSectionResizeMode( QHeaderView::Interactive ); header->setStretchLastSection( true ); m_osduWellboresModel = new OsduWellboreTableModel; - m_tableView->setModel( m_osduWellboresModel ); layout->addWidget( m_tableView ); layout->setStretchFactor( m_tableView, 10 ); + m_proxyModel = new QSortFilterProxyModel( this ); + m_proxyModel->setSourceModel( m_osduWellboresModel ); + m_proxyModel->setFilterKeyColumn( nameColumn ); + m_proxyModel->setFilterCaseSensitivity( Qt::CaseInsensitive ); + + m_tableView->setModel( m_proxyModel ); + m_tableView->setSortingEnabled( true ); + + QObject::connect( filterLineEdit, &QLineEdit::textChanged, m_proxyModel, &QSortFilterProxyModel::setFilterWildcard ); + m_wellPathImportObject = wellPathImport; m_osduConnector = osduConnector; @@ -447,7 +471,7 @@ void WellSelectionPage::selectWellbore( const QItemSelection& newSelection, cons if ( index.column() == idColumn ) { - QString wellboreId = m_osduWellboresModel->data( index.siblingAtColumn( idColumn ) ).toString(); + QString wellboreId = m_proxyModel->data( index.siblingAtColumn( idColumn ) ).toString(); wellboreIds.push_back( wellboreId ); } } diff --git a/ApplicationLibCode/Commands/OsduImportCommands/RiuWellImportWizard.h b/ApplicationLibCode/Commands/OsduImportCommands/RiuWellImportWizard.h index c3adeae7cb..449bd5e840 100644 --- a/ApplicationLibCode/Commands/OsduImportCommands/RiuWellImportWizard.h +++ b/ApplicationLibCode/Commands/OsduImportCommands/RiuWellImportWizard.h @@ -120,6 +120,28 @@ public: endResetModel(); } + void sort( int column, Qt::SortOrder order = Qt::AscendingOrder ) override + { + std::sort( m_osduFields.begin(), + m_osduFields.end(), + [column, order]( const OsduField& a, const OsduField& b ) + { + switch ( column ) + { + case 0: + return ( order == Qt::AscendingOrder ) ? a.id < b.id : a.id > b.id; + case 1: + return ( order == Qt::AscendingOrder ) ? a.kind < b.kind : a.kind > b.kind; + case 2: + return ( order == Qt::AscendingOrder ) ? a.name < b.name : a.name > b.name; + default: + return false; + } + } ); + emit dataChanged( index( 0, 0 ), index( rowCount() - 1, columnCount() - 1 ) ); + emit layoutChanged(); + } + private: std::vector m_osduFields; }; @@ -207,6 +229,28 @@ public: endResetModel(); } + void sort( int column, Qt::SortOrder order = Qt::AscendingOrder ) override + { + std::sort( m_osduWellbores.begin(), + m_osduWellbores.end(), + [column, order]( const OsduWellbore& a, const OsduWellbore& b ) + { + switch ( column ) + { + case 0: + return ( order == Qt::AscendingOrder ) ? a.id < b.id : a.id > b.id; + case 1: + return ( order == Qt::AscendingOrder ) ? a.kind < b.kind : a.kind > b.kind; + case 2: + return ( order == Qt::AscendingOrder ) ? a.name < b.name : a.name > b.name; + default: + return false; + } + } ); + emit dataChanged( index( 0, 0 ), index( rowCount() - 1, columnCount() - 1 ) ); + emit layoutChanged(); + } + private: std::vector m_osduWellbores; std::map> m_map; @@ -285,6 +329,7 @@ private: RiaOsduConnector* m_osduConnector; QTableView* m_tableView; OsduWellboreTableModel* m_osduWellboresModel; + QSortFilterProxyModel* m_proxyModel; }; //--------------------------------------------------------------------------------------------------