X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FHYDROGUI%2FHYDROGUI_PriorityWidget.cxx;h=2f84a8229570b92dfa9bd6f83734042a80a5db6f;hb=445cca2de7e4814cdc8d6cb7727b5bf2e3170220;hp=f842733bad178838730b735016613710340e9610;hpb=bae3f70c4e95c5bff78d7994d04b1cc4dddbc407;p=modules%2Fhydro.git diff --git a/src/HYDROGUI/HYDROGUI_PriorityWidget.cxx b/src/HYDROGUI/HYDROGUI_PriorityWidget.cxx index f842733b..2f84a822 100644 --- a/src/HYDROGUI/HYDROGUI_PriorityWidget.cxx +++ b/src/HYDROGUI/HYDROGUI_PriorityWidget.cxx @@ -1,12 +1,8 @@ -// Copyright (C) 2007-2013 CEA/DEN, EDF R&D, OPEN CASCADE -// -// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// +// Copyright (C) 2014-2015 EDF-R&D // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public // License as published by the Free Software Foundation; either -// version 2.1 of the License. +// version 2.1 of the License, or (at your option) any later version. // // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -29,27 +25,12 @@ #include #include +#include #include -#include #include #include -/** - Custom item delegate (combobox) - */ -class HYDROGUI_PriorityWidget::Delegate : public QStyledItemDelegate -{ -public: - Delegate( QObject* theParent = 0 ); - - QWidget* createEditor( QWidget*, const QStyleOptionViewItem&, - const QModelIndex& ) const; - - void setEditorData( QWidget*, const QModelIndex& ) const; - void setModelData( QWidget*, QAbstractItemModel*, const QModelIndex& ) const; -}; - /** Constructor. @param theParent the parent object @@ -73,11 +54,12 @@ QWidget* HYDROGUI_PriorityWidget::Delegate::createEditor( aComboBox->addItem( aText, aMap.value( aText ).toInt() ); } } else if ( theIndex.column() == 0 || theIndex.column() == 2 ) { - QStringList anItems = theIndex.data( Qt::UserRole ).toStringList(); QStringList anObjNames = theIndex.data( Qt::UserRole ).toStringList(); aComboBox->addItems( anObjNames ); } + connect( aComboBox, SIGNAL( activated( int ) ), this, SLOT( finishEditing() ) ); + return aComboBox; } @@ -126,6 +108,18 @@ void HYDROGUI_PriorityWidget::Delegate::setModelData( } } +/** + Emit signal indicating that the user has finished editing. + */ +void HYDROGUI_PriorityWidget::Delegate::finishEditing() +{ + QWidget* anEditor = qobject_cast( sender() ); + if ( anEditor ) { + emit commitData( anEditor ); + emit closeEditor( anEditor ); + } +} + /** Constructor. @@ -150,12 +144,23 @@ HYDROGUI_PriorityWidget::HYDROGUI_PriorityWidget( QWidget* theParent ) // Table view myTable = new QTableView( this ); myTable->setItemDelegate( new Delegate( this ) ); - myTable->setEditTriggers( QAbstractItemView::DoubleClicked | QAbstractItemView::SelectedClicked ); - + myTable->setEditTriggers( QAbstractItemView::DoubleClicked | + QAbstractItemView::SelectedClicked | + QAbstractItemView::EditKeyPressed ); + // Set the custom model HYDROGUI_PriorityTableModel* aModel = new HYDROGUI_PriorityTableModel(); myTable->setModel( aModel ); + // Set resize mode + myTable->horizontalHeader()->setStretchLastSection( false); + myTable->horizontalHeader()->setSectionResizeMode( 0, QHeaderView::Stretch ); + myTable->horizontalHeader()->setSectionResizeMode( 1, QHeaderView::ResizeToContents ); + myTable->horizontalHeader()->setSectionResizeMode( 2, QHeaderView::Stretch ); + myTable->horizontalHeader()->setSectionResizeMode( 3, QHeaderView::ResizeToContents ); + + myTable->verticalHeader()->setSectionResizeMode( QHeaderView::ResizeToContents ); + // Layout // buttons QHBoxLayout* aButtonsLayout = new QHBoxLayout(); @@ -180,6 +185,7 @@ HYDROGUI_PriorityWidget::HYDROGUI_PriorityWidget( QWidget* theParent ) this, SLOT( onSelectionChanged() ) ); connect( aModel, SIGNAL( showError( const QString& ) ), this, SLOT( onShowError( const QString& ) ) ); + connect( aModel, SIGNAL( ruleChanged() ), this, SIGNAL( ruleChanged() ) ); } /** @@ -199,6 +205,7 @@ void HYDROGUI_PriorityWidget::onAddRule() if ( aModel ) { if (aModel->createNewRule()) { updateControls(); + emit ruleChanged(); } } } @@ -214,13 +221,16 @@ void HYDROGUI_PriorityWidget::onRemoveRule() if (aModel) { 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; } if ( aModel->removeRows( aRows ) ) { updateControls(); + emit ruleChanged(); } } } @@ -234,13 +244,15 @@ void HYDROGUI_PriorityWidget::onClearRules() dynamic_cast( myTable->model() ); if ( aModel && aModel->removeAll() ) { updateControls(); + emit ruleChanged(); } } /** - Set objects. + Set objects which could be used for rules definition. + @param theObjects the ordered list of objects */ -void HYDROGUI_PriorityWidget::setObjects( const QList& theObjects ) +void HYDROGUI_PriorityWidget::setObjects( const QList& theObjects ) { HYDROGUI_PriorityTableModel* aModel = dynamic_cast( myTable->model() ); @@ -281,12 +293,21 @@ void HYDROGUI_PriorityWidget::setRules( const HYDROData_ListOfRules& theRules ) } } +/** + Get table view. + @return the table view + */ +QTableView* HYDROGUI_PriorityWidget::getTable() const +{ + return myTable; +} + /** Slot called on table selection change. */ void HYDROGUI_PriorityWidget::onSelectionChanged() { - QModelIndexList aSelectedIndexes = myTable->selectionModel()->selectedRows(); + QModelIndexList aSelectedIndexes = myTable->selectionModel()->selectedIndexes(); myRemove->setEnabled( aSelectedIndexes.count() > 0 ); } @@ -301,9 +322,6 @@ void HYDROGUI_PriorityWidget::updateControls() myAdd->setEnabled( aModel->canCreateNewRule() ); bool isTableNotEmpty = aModel->rowCount() > 0; myClear->setEnabled( isTableNotEmpty ); - if ( isTableNotEmpty ) { - myTable->resizeColumnsToContents(); - } } onSelectionChanged(); } @@ -312,5 +330,16 @@ void HYDROGUI_PriorityWidget::updateControls() Show error message. */ void HYDROGUI_PriorityWidget::onShowError( const QString& theMsg ) { - SUIT_MessageBox::critical( this, tr( "ERROR" ), theMsg ); -} \ No newline at end of file + SUIT_MessageBox::warning( this, tr( "INCORRECT_INPUT" ), theMsg ); +} + +/** + Undo last change in priority rules table. + */ +void HYDROGUI_PriorityWidget::undoLastChange() +{ + HYDROGUI_PriorityTableModel* aModel = + dynamic_cast( myTable->model() ); + if ( aModel ) + aModel->undoLastChange(); +}