]> Creatis software - cpPlugins.git/blob - lib/cpPlugins/Interface/ParametersListWidget.cxx
Widget integration (step 3/6). WARNING: IT DOES NOT COMPILE YET
[cpPlugins.git] / lib / cpPlugins / Interface / ParametersListWidget.cxx
1 #include <cpPlugins/Interface/ParametersListWidget.h>
2
3 #ifdef cpPlugins_Interface_QT4
4
5 #include <cpPlugins/Interface/ui_ParametersListWidget.h>
6
7 #include <set>
8
9 // -------------------------------------------------------------------------
10 cpPlugins::Interface::ParametersListWidget::
11 ParametersListWidget( const std::string& list_name, QWidget* parent )
12   : QWidget( parent ),
13     m_UI( new Ui::ParametersListWidget )
14 {
15   this->m_UI->setupUi( this );
16
17   // Configure table
18   QTableWidget* table = this->m_UI->ValuesTable;
19   table->setColumnCount( 1 );
20   table->setRowCount( 1 );
21
22   QStringList header;
23   header << list_name.c_str( );
24   table->setHorizontalHeaderLabels( header );
25   table->setShowGrid( true );
26   table->setSelectionBehavior( QAbstractItemView::SelectRows );
27
28   // Connect signals
29   QObject::connect(
30     this->m_UI->AddValueButton, SIGNAL( clicked( ) ),
31     this, SLOT( _changeValuesCount( ) )
32     );
33   QObject::connect(
34     this->m_UI->RemoveValueButton, SIGNAL( clicked( ) ),
35     this, SLOT( _changeValuesCount( ) )
36     );
37 }
38
39 // -------------------------------------------------------------------------
40 cpPlugins::Interface::ParametersListWidget::
41 ~ParametersListWidget( )
42 {
43   delete this->m_UI;
44 }
45
46 // -------------------------------------------------------------------------
47 std::vector< std::string > cpPlugins::Interface::ParametersListWidget::
48 GetStringValues( ) const
49 {
50   std::vector< std::string > values;
51
52   QTableWidget* table = this->m_UI->ValuesTable;
53   for( int i = 0; i < table->rowCount( ); ++i )
54     values.push_back( table->item( i, 0 )->text( ).toStdString( ) );
55   return( values );
56 }
57
58 // -------------------------------------------------------------------------
59 std::vector< int > cpPlugins::Interface::ParametersListWidget::
60 GetIntValues( ) const
61 {
62   std::vector< int > values;
63
64   QTableWidget* table = this->m_UI->ValuesTable;
65   for( int i = 0; i < table->rowCount( ); ++i )
66   {
67     const char* text = table->item( i, 0 )->text( ).toStdString( ).c_str( );
68     char* ptr = 0;
69     double v = std::strtod( text, &ptr );
70     if( *ptr == '\0' && ptr != text )
71       values.push_back( int( v ) );
72     
73   } // rof
74   return( values );
75 }
76
77 // -------------------------------------------------------------------------
78 std::vector< unsigned int > cpPlugins::Interface::ParametersListWidget::
79 GetUintValues( ) const
80 {
81   std::vector< unsigned int > values;
82
83   QTableWidget* table = this->m_UI->ValuesTable;
84   for( int i = 0; i < table->rowCount( ); ++i )
85   {
86     const char* text = table->item( i, 0 )->text( ).toStdString( ).c_str( );
87     char* ptr = 0;
88     double v = std::strtod( text, &ptr );
89     if( *ptr == '\0' && ptr != text && v >= double( 0 ) )
90       values.push_back( ( unsigned int )( v ) );
91
92   } // rof
93   return( values );
94 }
95
96 // -------------------------------------------------------------------------
97 std::vector< double > cpPlugins::Interface::ParametersListWidget::
98 GetDoubleValues( ) const
99 {
100   std::vector< double > values;
101
102   QTableWidget* table = this->m_UI->ValuesTable;
103   for( int i = 0; i < table->rowCount( ); ++i )
104   {
105     const char* text = table->item( i, 0 )->text( ).toStdString( ).c_str( );
106     char* ptr = 0;
107     double v = std::strtod( text, &ptr );
108     if( *ptr == '\0' && ptr != text )
109       values.push_back( v );
110     
111   } // rof
112   return( values );
113 }
114
115 // -------------------------------------------------------------------------
116 void cpPlugins::Interface::ParametersListWidget::
117 _changeValuesCount( )
118 {
119   QPushButton* btn = dynamic_cast< QPushButton* >( this->sender( ) );
120   if( btn == NULL )
121     return;
122   QTableWidget* table = this->m_UI->ValuesTable;
123
124   if( btn == this->m_UI->RemoveValueButton )
125   {
126     std::set< int > to_delete;
127     QList< QTableWidgetItem* > lst = table->selectedItems( );
128     QList< QTableWidgetItem* >::iterator i = lst.begin( );
129     for( ; i != lst.end( ); ++i )
130       to_delete.insert( ( *i )->row( ) );
131
132     std::set< int >::const_reverse_iterator d = to_delete.rbegin( );
133     for( ; d != to_delete.rend( ); ++d )
134       table->removeRow( *d );
135   }
136   else
137     table->insertRow( table->rowCount( ) );
138 }
139
140 #endif // cpPlugins_Interface_QT4
141
142 // eof - $RCSfile$