mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
#11496 OSDU well path import: add sorting and filter of wells.
This commit is contained in:
@@ -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 );
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
|
||||
Reference in New Issue
Block a user