#11496 OSDU well path import: add sorting and filter of wells.

This commit is contained in:
Kristian Bendiksen
2024-06-18 09:27:34 +02:00
parent 80f269715b
commit acb76061ee
2 changed files with 71 additions and 2 deletions

View File

@@ -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 );
}
}

View File

@@ -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<OsduField> 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<OsduWellbore> m_osduWellbores;
std::map<QString, std::vector<OsduWellbore>> m_map;
@@ -285,6 +329,7 @@ private:
RiaOsduConnector* m_osduConnector;
QTableView* m_tableView;
OsduWellboreTableModel* m_osduWellboresModel;
QSortFilterProxyModel* m_proxyModel;
};
//--------------------------------------------------------------------------------------------------