X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FPluginUtils%2FSMESH_AdvOptionsWdg.cxx;fp=src%2FPluginUtils%2FSMESH_AdvOptionsWdg.cxx;h=5ae7c92ee75787c53ce436df031d35ec4d273812;hp=0000000000000000000000000000000000000000;hb=7646a7f54e99134575c14521e60b6fa8c2418201;hpb=9341b16ef36f05343f4717ba42765951a50fef5f diff --git a/src/PluginUtils/SMESH_AdvOptionsWdg.cxx b/src/PluginUtils/SMESH_AdvOptionsWdg.cxx new file mode 100644 index 000000000..5ae7c92ee --- /dev/null +++ b/src/PluginUtils/SMESH_AdvOptionsWdg.cxx @@ -0,0 +1,155 @@ +// Copyright (C) 2007-2016 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 +// +// 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, 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 +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +// File : SMESH_AdvOptionsWdg.h +// Author : Open CASCADE S.A.S. + +#include "SMESH_AdvOptionsWdg.h" + +#include +#include +#include +#include +#include + +#define SPACING 6 +#define MARGIN 11 + +namespace +{ + const int IS_CUSTOM = Qt::UserRole; +} + +SMESH_AdvOptionsWdg::SMESH_AdvOptionsWdg( QWidget* parent ) + : QWidget( parent ) +{ + myTable = new QTableWidget( /*nbrows=*/0, /*nbcol=*/3, this ); + QPushButton* addBtn = new QPushButton( tr("ADD_OPTION_BTN"), this ); + + myTable->setHorizontalHeaderLabels + ( QStringList() << tr("CHOICE") << tr("OPTION_NAME") << tr("OPTION_VALUE") ); + QHeaderView * header = myTable->horizontalHeader(); + header->setSectionResizeMode( 0, QHeaderView::ResizeToContents ); + header->setSectionResizeMode( 1, QHeaderView::Stretch ); + header->setSectionResizeMode( 2, QHeaderView::ResizeToContents ); + + QGridLayout* lay = new QGridLayout( this ); + lay->setMargin( MARGIN ); + lay->setSpacing( SPACING ); + lay->addWidget( myTable, 0,0, 1,3 ); + lay->addWidget( addBtn, 1,0 ); + + connect( addBtn, SIGNAL( clicked() ), SLOT( onAdd() )); +} + +SMESH_AdvOptionsWdg::~SMESH_AdvOptionsWdg() +{ +} + +void SMESH_AdvOptionsWdg::AddOption( QString name, QString value, bool isDefault, bool isCustom ) +{ + int row = myTable->rowCount(); + myTable->insertRow( row ); + + QTableWidgetItem* nameItem = new QTableWidgetItem( name ); + QTableWidgetItem* valueItem = new QTableWidgetItem( value ); + if ( !name.isEmpty() ) + nameItem->setFlags( nameItem->flags() & ~Qt::ItemIsEditable ); + myTable->setItem( row, 1, nameItem ); + myTable->setItem( row, 2, valueItem ); + nameItem->setData( IS_CUSTOM, isCustom ); + + QCheckBox* chkBox = new QCheckBox(); + QWidget* wdg = new QWidget(); + QHBoxLayout* lay = new QHBoxLayout( wdg ); + lay->setContentsMargins(0,0,0,0); + lay->addStretch(); + lay->addWidget(chkBox); + lay->addStretch(); + myTable->setCellWidget( row, 0, wdg ); + connect( chkBox, SIGNAL(toggled(bool)), this, SLOT(onToggle())); + myTable->setCurrentCell( row, 1, QItemSelectionModel::NoUpdate ); + chkBox->setChecked( !isDefault ); + + if ( name.isEmpty() ) + myTable->editItem( nameItem ); +} + +void SMESH_AdvOptionsWdg::SetCustomOptions( const QString& text ) +{ + QStringList nameVals = text.split(" "); + for ( int i = 1; i < nameVals.count(); i += 2 ) + AddOption( nameVals[i-1], nameVals[i], false, true ); +} + +void SMESH_AdvOptionsWdg::onAdd() +{ + AddOption( "", "", false, true ); + +} +void SMESH_AdvOptionsWdg::onToggle() +{ + int row = myTable->currentRow(); + QTableWidgetItem* valueItem = myTable->item( row, 2 ); + + bool isActive = isChecked( row ); + int c = isActive ? 0 : 150; + valueItem->setForeground( QBrush( QColor( c, c, c ))); + if ( isActive ) + valueItem->setFlags( valueItem->flags() | Qt::ItemIsEditable ); + else + valueItem->setFlags( valueItem->flags() & ~Qt::ItemIsEditable ); +} + +void SMESH_AdvOptionsWdg::GetOption( int row, + QString& name, + QString& value, + bool& isDefault, + bool & isCustom) +{ + if ( row < myTable->rowCount() ) + { + name = myTable->item( row, 1 )->text(); + value = myTable->item( row, 2 )->text(); + isDefault = !isChecked( row ); + isCustom = myTable->item( row, 1 )->data( IS_CUSTOM ).toInt(); + } +} + +QString SMESH_AdvOptionsWdg::GetCustomOptions() +{ + QString text, value, name; + bool isDefault, isCustom; + for ( int row = 0; row < myTable->rowCount(); ++row ) + { + GetOption( row, name, value, isDefault, isCustom ); + if ( !name.isEmpty() && !value.isEmpty() && isCustom && !isDefault ) + text += name + " " + value + " "; + } + return text; +} + +bool SMESH_AdvOptionsWdg::isChecked( int row ) +{ + QCheckBox* cb = myTable->cellWidget( row, 0 )->findChild(); + return cb->isChecked(); +}