X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FHYDROGUI%2FHYDROGUI_StricklerTableDlg.cxx;h=4282490f65b55dd5dfe3d92d7287b3f883ddfca4;hb=d6bfe7c45ecf0dc6ed9819a40ce28b73b49d9592;hp=40269457f68c683b12a6aa1259fd74c758cc1e9c;hpb=c4b8216b4c32b59eb832047dbee6c325ddf4585c;p=modules%2Fhydro.git diff --git a/src/HYDROGUI/HYDROGUI_StricklerTableDlg.cxx b/src/HYDROGUI/HYDROGUI_StricklerTableDlg.cxx index 40269457..4282490f 100644 --- a/src/HYDROGUI/HYDROGUI_StricklerTableDlg.cxx +++ b/src/HYDROGUI/HYDROGUI_StricklerTableDlg.cxx @@ -16,34 +16,78 @@ // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // -#include "HYDROGUI_StricklerTableDlg.h" - -#include "HYDROGUI_Module.h" -#include "HYDROGUI_Tool.h" -#include "HYDROGUI_LineEditDoubleValidator.h" - -#include - -#include -#include +#include +#include +#include +#include #include -#include -#include - +#ifndef LIGHT_MODE +#include +#include +#endif +#include +#include #include -#include -#include -#include +#include #include +#include +#include #include -#include +#include + +HYDROGUI_ColorDelegate::HYDROGUI_ColorDelegate( QWidget* theParent ) +{ +} + +HYDROGUI_ColorDelegate::~HYDROGUI_ColorDelegate() +{ +} + +void HYDROGUI_ColorDelegate::paint( QPainter* thePainter, const QStyleOptionViewItem& theOption, + const QModelIndex& theIndex ) const +{ + QColor aColor = qVariantValue( theIndex.data( Qt::BackgroundColorRole ) ); + thePainter->fillRect( theOption.rect, aColor ); +} + +QWidget* HYDROGUI_ColorDelegate::createEditor( QWidget* theParent, + const QStyleOptionViewItem& theOption, + const QModelIndex& theIndex ) const +{ + QColor aColor = qVariantValue( theIndex.data( Qt::BackgroundColorRole ) ); + QColor aNewColor = QColorDialog::getColor( aColor ); + if( aNewColor.isValid() ) + { + QAbstractItemModel* aModel = const_cast( theIndex.model() ); + QVariant aValue = qVariantFromValue( aNewColor ); + aModel->setData( theIndex, aValue, Qt::BackgroundColorRole ); + } + return 0; +} + +void HYDROGUI_ColorDelegate::setEditorData( QWidget* theEditor, const QModelIndex& theIndex ) const +{ +} + +void HYDROGUI_ColorDelegate::setModelData( QWidget* theEditor, QAbstractItemModel* theModel, + const QModelIndex& theIndex ) const +{ +} + +QSize HYDROGUI_ColorDelegate::sizeHint( const QStyleOptionViewItem& theOption, const QModelIndex& theIndex ) const +{ + return theOption.rect.size(); +} + + + +const int COLUMNS_COUNT = 4; + HYDROGUI_StricklerTableDlg::HYDROGUI_StricklerTableDlg( HYDROGUI_Module* theModule, const QString& theTitle, int theType ) : HYDROGUI_InputPanel( theModule, theTitle ), myType( theType ) { - SUIT_ResourceMgr* aResMgr = SUIT_Session::session()->resourceMgr(); - QString fileGroupTitle = theType == Export ? tr( "EXPORT_STRICKLER_TABLE_FILE" ) : tr( "IMPORT_STRICKLER_TABLE_FILE" ); // Import Strickler table from file @@ -56,7 +100,10 @@ HYDROGUI_StricklerTableDlg::HYDROGUI_StricklerTableDlg( HYDROGUI_Module* theModu myFileName->setReadOnly( true ); QToolButton* aBrowseBtn = new QToolButton( aFileNameGroup ); +#ifndef LIGHT_MODE + SUIT_ResourceMgr* aResMgr = SUIT_Session::session()->resourceMgr(); aBrowseBtn->setIcon( aResMgr->loadPixmap( "HYDRO", tr( "BROWSE_ICO" ) ) ); +#endif QBoxLayout* aFileNameLayout = new QHBoxLayout( aFileNameGroup ); aFileNameLayout->setMargin( 5 ); @@ -71,12 +118,22 @@ HYDROGUI_StricklerTableDlg::HYDROGUI_StricklerTableDlg( HYDROGUI_Module* theModu QLabel* anImageNameLabel = new QLabel( tr( "NAME" ), aNameGroup ); myName = new QLineEdit( aNameGroup ); + QGroupBox* aAttrNameGroup = new QGroupBox( tr( "STRICKLER_TABLE_ATTR_NAME" ), this ); + QLabel* aAttrNameLabel = new QLabel( tr( "ATTR_NAME" ), aAttrNameGroup ); + myAttrName = new QLineEdit( aAttrNameGroup ); + QBoxLayout* anImageNameLayout = new QHBoxLayout( aNameGroup ); anImageNameLayout->setMargin( 5 ); anImageNameLayout->setSpacing( 5 ); anImageNameLayout->addWidget( anImageNameLabel ); anImageNameLayout->addWidget( myName ); + QBoxLayout* anAttrNameLayout = new QHBoxLayout( aAttrNameGroup ); + anAttrNameLayout->setMargin( 5 ); + anAttrNameLayout->setSpacing( 5 ); + anAttrNameLayout->addWidget( aAttrNameLabel ); + anAttrNameLayout->addWidget( myAttrName ); + // Strickler table QGroupBox* aTableGroup = new QGroupBox( tr( "STRICKLER_TABLE_TABLE" ), this ); aTableGroup->setVisible( theType == Edit ); @@ -96,19 +153,23 @@ HYDROGUI_StricklerTableDlg::HYDROGUI_StricklerTableDlg( HYDROGUI_Module* theModu // Table myTable = new QTableWidget( mainFrame() ); - myTable->setItemDelegate( new HYDROGUI_LineEditDoubleValidator( this ) ); + myTable->setItemDelegateForColumn( 1, new HYDROGUI_LineEditDoubleValidator( this ) ); + myTable->setItemDelegateForColumn( 3, new HYDROGUI_ColorDelegate( this ) ); myTable->setEditTriggers( QAbstractItemView::DoubleClicked | QAbstractItemView::SelectedClicked | QAbstractItemView::EditKeyPressed ); - myTable->setColumnCount( 2 ); + myTable->setColumnCount( COLUMNS_COUNT ); QStringList aColumnNames; - aColumnNames << tr( "STRICKLER_TYPE" ) << tr( "STRICKLER_COEFFICIENT" ); + aColumnNames << tr( "STRICKLER_TYPE" ) << tr( "STRICKLER_COEFFICIENT" ) << tr( "ATTR_VALUE" ) << tr( "COLOR" ); myTable->setHorizontalHeaderLabels( aColumnNames ); - myTable->horizontalHeader()->setStretchLastSection( false); - myTable->horizontalHeader()->setResizeMode( 0, QHeaderView::Stretch ); + myTable->horizontalHeader()->setStretchLastSection( false ); + myTable->horizontalHeader()->setResizeMode( 0, QHeaderView::ResizeToContents ); myTable->horizontalHeader()->setResizeMode( 1, QHeaderView::ResizeToContents ); + myTable->horizontalHeader()->setResizeMode( 2, QHeaderView::ResizeToContents ); + myTable->horizontalHeader()->setResizeMode( 3, QHeaderView::Stretch ); + myTable->horizontalHeader()->setMinimumSectionSize( 15 ); myTable->verticalHeader()->setResizeMode( QHeaderView::ResizeToContents ); @@ -127,6 +188,7 @@ HYDROGUI_StricklerTableDlg::HYDROGUI_StricklerTableDlg( HYDROGUI_Module* theModu // Common addWidget( aFileNameGroup ); addWidget( aNameGroup ); + addWidget( aAttrNameGroup ); addWidget( aTableGroup ); // Update controls @@ -140,7 +202,7 @@ HYDROGUI_StricklerTableDlg::HYDROGUI_StricklerTableDlg( HYDROGUI_Module* theModu connect( myTable->selectionModel(), SIGNAL( selectionChanged( QItemSelection, QItemSelection ) ), this, SLOT( onSelectionChanged() ) ); - setMinimumWidth( 350 ); + setMinimumWidth( 450 ); if ( theType != Edit ) addStretch(); @@ -187,47 +249,81 @@ void HYDROGUI_StricklerTableDlg::setTableNameReadOnly( bool on ) myName->setReadOnly( on ); } -HYDROGUI_StricklerTableDlg::StricklerCoefficientList HYDROGUI_StricklerTableDlg::getData() const +void HYDROGUI_StricklerTableDlg::getGuiData( Handle_HYDROData_StricklerTable& theTable ) const { - StricklerCoefficientList aRes; - for ( int i = 0; i < myTable->rowCount(); i++ ) - { - QTableWidgetItem* typeItem = myTable->item( i, 0 ); - QTableWidgetItem* coeffItem = myTable->item( i, 1 ); - aRes.append( StricklerCoefficient( typeItem->text(), coeffItem->text().toDouble() ) ); - } - return aRes; + if( theTable.IsNull() ) + return; + + theTable->SetAttrName( myAttrName->text() ); + theTable->Clear(); + for ( int i = 0; i < myTable->rowCount(); i++ ) + { + QTableWidgetItem* typeItem = myTable->item( i, 0 ); + QString aType = typeItem->data( Qt::DisplayRole ).toString(); + + QTableWidgetItem* coeffItem = myTable->item( i, 1 ); + QString aCoeffStr = coeffItem->data( Qt::DisplayRole ).toString(); + double aCoeff = aCoeffStr.toDouble(); + + QTableWidgetItem* attrValueItem = myTable->item( i, 2 ); + QString anAttrValue = attrValueItem->data( Qt::DisplayRole ).toString(); + + QTableWidgetItem* colorItem = myTable->item( i, 3 ); + QColor aColor = colorItem->backgroundColor(); + + theTable->Set( aType, aCoeff ); + theTable->SetAttrValue( aType, anAttrValue ); + theTable->SetColor( aType, aColor ); + } } -void HYDROGUI_StricklerTableDlg::setData(const StricklerCoefficientList& theData) +void HYDROGUI_StricklerTableDlg::setGuiData( const Handle_HYDROData_StricklerTable& theTable ) { - myTable->setRowCount( 0 ); + myAttrName->setText( theTable->GetAttrName() ); - foreach ( const StricklerCoefficient& aData, theData ) { - // Check the current Strickler type - if ( aData.myType.isEmpty() ) { - continue; - } + if( theTable.IsNull() ) + { + myTable->setRowCount( 0 ); + return; + } + + QStringList aTypes = theTable->GetTypes(); + myTable->setRowCount( 0 ); + foreach( QString aType, aTypes ) + { + // Check the current Strickler type + if( aType.isEmpty() ) + continue; + + // Get Strickler data for the current Strickler type + QString aCoefficient = HYDROGUI_Tool::GetCoordinateString( theTable->Get( aType, 0.0 ), false ); + QString anAttrValue = theTable->GetAttrValue( aType ); + QColor aColor = theTable->GetColor( aType ); + + // Insert row with the data + int aRow = myTable->rowCount(); + myTable->insertRow( aRow ); - // Get Strickler coefficient value for the current Strickler type - QString aCoefficient = HYDROGUI_Tool::GetCoordinateString( aData.myCoefficient, false ); + // "Type" column + QTableWidgetItem* aTypeItem = new QTableWidgetItem( aType ); + myTable->setItem( aRow, 0, aTypeItem ); - // Insert row with the data - int aRow = myTable->rowCount(); - myTable->insertRow( aRow ); + // "Coefficient" column + myTable->setItem( aRow, 1, new QTableWidgetItem( aCoefficient ) ); - // "Type" column - QTableWidgetItem* aTypeItem = new QTableWidgetItem( aData.myType ); - myTable->setItem( aRow, 0, aTypeItem ); + // "Attribute value" column + myTable->setItem( aRow, 2, new QTableWidgetItem( anAttrValue ) ); - // "Coefficient" column - myTable->setItem( aRow, 1, new QTableWidgetItem( aCoefficient ) ); - } + // "Color" column + QTableWidgetItem* anItem = new QTableWidgetItem(); + anItem->setBackgroundColor( aColor ); + myTable->setItem( aRow, 3, anItem ); + } - myTable->resizeColumnToContents( 0 ); - myTable->resizeRowsToContents(); + myTable->resizeColumnToContents( 0 ); + myTable->resizeRowsToContents(); - updateControls(); + updateControls(); } void HYDROGUI_StricklerTableDlg::updateControls() @@ -274,6 +370,11 @@ void HYDROGUI_StricklerTableDlg::onAddCoefficient() int aRow = myTable->rowCount(); myTable->insertRow( aRow ); + for( int i=0; isetItem( aRow, i, new QTableWidgetItem() ); + } + // Set default type (=> generate unique type name) and coefficient //... @@ -286,9 +387,11 @@ Remove the selected Strickler coefficient. void HYDROGUI_StricklerTableDlg::onRemoveCoefficient() { QList aRows; - QModelIndexList aSelectedIndexes = myTable->selectionModel()->selectedRows(); + QModelIndexList aSelectedIndexes = myTable->selectionModel()->selectedIndexes(); foreach ( const QModelIndex& anIndex, aSelectedIndexes ) { - aRows << anIndex.row(); + int aRowIndex = anIndex.row(); + if ( !aRows.contains( aRowIndex ) ) + aRows << aRowIndex; } removeRows( aRows ); @@ -312,6 +415,6 @@ Slot called on table selection change. */ void HYDROGUI_StricklerTableDlg::onSelectionChanged() { - QModelIndexList aSelectedIndexes = myTable->selectionModel()->selectedRows(); + QModelIndexList aSelectedIndexes = myTable->selectionModel()->selectedIndexes(); myRemoveBtn->setEnabled( aSelectedIndexes.count() > 0 ); }