38 #include <QTableWidgetSelectionRange>
39 #include <QHeaderView>
41 #include <QApplication>
43 #include <QToolButton>
44 #include <QMessageBox>
61 QTableWidget(rows, columns, iParent), PrevCol(-1), PrevOrder(-1)
92 if ( ColumnIndex == -1 )
94 std::cout <<
"The column figureID has not been found";
95 std::cout <<
"Debug: In " << __FILE__ <<
", line " << __LINE__;
96 std::cout << std::endl;
97 std::cout << std::endl;
102 for (
int i = 0; i <
rowCount(); i++ )
122 std::cout <<
"The QStringlist ColumnsHeader is empty";
123 std::cout <<
"Debug: In " << __FILE__ <<
", line " << __LINE__;
124 std::cout << std::endl;
127 return ColumnsHeader.
indexOf(iColumnName, 0);
142 return ColumnNamesOrder;
149 const std::string & iTraceName,
150 Qt::CheckState iState,
168 const std::list< unsigned int > & iListTraceIDs,
169 Qt::CheckState iState,
170 const std::string & iTraceName)
172 std::list< unsigned int >::const_iterator iter = iListTraceIDs.begin();
174 while ( iter != iListTraceIDs.end() )
185 const std::string & iTraceName,
186 Qt::CheckState iState,
190 std::cout <<
"iTraceID: " << iTraceID << std::endl;
191 std::cout <<
"iTraceName: " << iTraceName << std::endl;
192 std::cout <<
"EmitSignal: " << EmitSignal << std::endl;
197 std::cout <<
"ColumnIndex: " << ColumnIndex << std::endl;
198 std::cout <<
"RowIndex: " << RowIndex << std::endl;
199 std::cout <<
"this->item(RowIndex, ColumnIndex): " << this->
item(RowIndex, ColumnIndex) << std::endl;
202 this->
item(RowIndex, ColumnIndex), iState, EmitSignal);
209 const std::string & iTraceName)
212 std::stringstream TraceIDName;
214 TraceIDName << iTraceName;
217 if ( oRowIndex == -1 )
220 std::cerr <<
"Debug: In " << __FILE__ <<
", line " << __LINE__;
221 std::cerr << std::endl;
236 for (
int i = 0; i < Selection.
size(); i++ )
238 int TopRowSelected = Selection[i].topRow();
239 int BottomRowSelected = Selection[i].bottomRow();
241 for (
int j = TopRowSelected; j < BottomRowSelected + 1; j++ )
243 Values.
append( this->
item(j, ColumnIndex)->text() );
253 const std::list< std::pair< std::string, std::string > >& iColumnNamesAndToolTip)
255 size_t numberCol = iColumnNamesAndToolTip.size();
261 for ( std::list< std::pair< std::string, std::string > >::const_iterator
262 iter = iColumnNamesAndToolTip.begin();
263 iter != iColumnNamesAndToolTip.end();
267 std::string NameHeader, ToolTip;
268 NameHeader = iter->first;
269 ToolTip = iter->second;
271 HeaderCol->
setText( NameHeader.c_str() );
272 if ( ToolTip !=
"None" )
277 QFont serifFont(
"Arial", 10, QFont::Bold);
289 SIGNAL( sortIndicatorChanged(
int, Qt::SortOrder) ),
290 this, SLOT(
sortItems(
int, Qt::SortOrder) ) );
303 const std::vector< int > & iIndexColorTraceRowContainer,
304 const std::vector< int > & iIndexColorCollectionRowContainer,
305 const std::string & iTraceName,
306 const std::string & iCollectionName,
307 const std::list< std::pair< std::string, std::string > > & iColumnNamesAndToolTip,
308 Qt::CheckState iState,
309 int iIndexShowColumn)
311 this->DisplayColumnNames(iColumnNamesAndToolTip);
312 this->InsertNewRows(iTWRowContainer,
313 iIndexColorTraceRowContainer,
314 iIndexColorCollectionRowContainer,
315 iTraceName, iCollectionName,
329 Checkbox->
setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable);
331 QColor WhiteColor(Qt::white);
334 this->
setItem(iIndexRow, indexCol, Checkbox);
341 Qt::CheckState iState)
348 Checkbox->
setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable);
349 QColor WhiteColor(Qt::white);
351 this->
setItem(iIndexRow, indexCol, Checkbox);
359 unsigned int iIndexTWRowContainer,
360 const std::vector< int > & iIndexColorRowContainer,
361 const std::string & iNameGroupColor,
362 unsigned int iIndexRowTW)
365 std::string ColumnNameID = iNameGroupColor;
366 ColumnNameID +=
"ID";
367 int indexGroupIDInTableWidget =
findColumnName( ColumnNameID.c_str() );
370 int Alpha = atoi( iTWRowContainer[iIndexColorRowContainer[3]].second[iIndexTWRowContainer].c_str() );
371 if ( iTWRowContainer[indexGroupIDInTableWidget].second[iIndexTWRowContainer] ==
"0" || Alpha == 0 )
373 Color.setRgb(255, 255, 255, 255);
374 int rgb = 255 - ( 255 * 3 ) / 3;
375 TextColor.
setRgb(rgb, rgb, rgb, 255);
379 int Red = atoi( iTWRowContainer[iIndexColorRowContainer[0]].second[iIndexTWRowContainer].c_str() );
380 int Green = atoi( iTWRowContainer[iIndexColorRowContainer[1]].second[iIndexTWRowContainer].c_str() );
381 int Blue = atoi( iTWRowContainer[iIndexColorRowContainer[2]].second[iIndexTWRowContainer].c_str() );
382 Color.setRgb(Red, Green, Blue, Alpha);
383 int rgb = 255 - ( Red + Green + Blue ) / 3;
384 TextColor.
setRgb(rgb, rgb, rgb, 255);
388 this->
item(iIndexRowTW, indexGroupIDInTableWidget)->
setTextColor(TextColor);
395 unsigned int iIndexTWRowContainer,
397 const std::vector< int > & iIndexColorTraceRowContainer,
398 const std::vector< int > & iIndexColorCollectionRowContainer,
399 const std::string & iTraceName,
400 const std::string & iCollectionName)
402 if ( iIndexTWRow != -1 )
405 unsigned int NumberOfRows = iTWRowContainer.size();
408 for (
unsigned int i = 0; i < NumberOfRows; i++ )
410 if ( iTWRowContainer[i].first.ColumnNameTableWidget !=
"None"
411 && !iTWRowContainer[i].second.empty() )
413 for (
int j = 0; j < NumberOfColumns; j++ )
416 if ( HeaderCol == iTWRowContainer[i].first.ColumnNameTableWidget )
418 std::string Value = iTWRowContainer[i].second[iIndexTWRowContainer];
419 t_item = this->
item(iIndexTWRow, j);
424 this->
setItem(iIndexTWRow, j, t_item);
428 if ( iTWRowContainer[i].first.TypeName ==
"string" )
442 iIndexColorTraceRowContainer, iTraceName, iIndexTWRow);
443 if (iCollectionName !=
"None")
446 iIndexColorCollectionRowContainer,
447 iCollectionName, iIndexTWRow);
455 unsigned int iIndexTWRowContainer,
456 const std::vector< int > & iIndexColorTraceRowContainer,
457 const std::vector< int > & iIndexColorCollectionRowContainer,
458 const std::string & iTraceName,
459 const std::string & iCollectionName,
460 Qt::CheckState iVisible)
465 IndexNewRow, iIndexColorTraceRowContainer,
466 iIndexColorCollectionRowContainer,
467 iTraceName, iCollectionName);
475 const std::vector< int > & iIndexColorTraceRowContainer,
476 const std::vector< int > & iIndexColorCollectionRowContainer,
477 const std::string & iTraceName,
478 const std::string & iCollectionName,
479 Qt::CheckState iVisible)
481 if ( !iTWRowContainer[1].second.empty() )
484 for (
unsigned int i = 0; i < iTWRowContainer[1].second.size(); i++ )
486 this->
InsertNewRow(iTWRowContainer, i, iIndexColorTraceRowContainer,
487 iIndexColorCollectionRowContainer, iTraceName, iCollectionName,
498 const std::vector< int > & iIndexColorTraceRowContainer,
499 const std::vector< int > & iIndexColorCollectionRowContainer,
500 const std::string & TraceName,
501 const std::string & CollectionName,
502 Qt::CheckState iVisible)
506 if ( iTWRowContainer.size() == 0 || iTWRowContainer[1].second.size() != 1 )
508 std::cout <<
"The New Trace Row Container is totally empty or there is more than 1 trace in it";
509 std::cout <<
"Debug: In " << __FILE__ <<
", line " << __LINE__;
510 std::cout << std::endl;
515 iIndexColorTraceRowContainer,
516 iIndexColorCollectionRowContainer,
517 TraceName, CollectionName, iVisible);
527 const std::string & iHeaderCol)
533 if ( iValue ==
"-1" && iHeaderCol.compare(
"T.I.Channel") > 0 )
544 const std::vector< int > & iIndexColorTraceRowContainer,
545 const std::vector< int > & iIndexColorCollectionRowContainer,
546 const std::string & iTraceName,
547 const std::string & iCollectionName,
553 if ( iTWRowContainer.size() == 0 || iTWRowContainer[1].second.size() != 1 )
555 std::cout <<
"Debug: In " << __FILE__ <<
", line " << __LINE__;
556 std::cout << std::endl;
557 std::cout <<
"The Update Trace Row Container is totally empty or there is more than 1 trace in it";
558 std::cout << std::endl;
564 if ( IndexUpdateRow != -1 )
568 iIndexColorTraceRowContainer,
569 iIndexColorCollectionRowContainer,
570 iTraceName, iCollectionName);
574 std::cout <<
"Debug: In " << __FILE__ <<
", line " << __LINE__;
575 std::cout << std::endl;
576 std::cout <<
"the row doesn't exist";
577 std::cout << std::endl;
588 const std::list< unsigned int > & iTraceIDs)
591 std::list< unsigned int >::const_iterator iter = iTraceIDs.begin();
592 while ( iter != iTraceIDs.end() )
610 if ( this->
item(iRow, iColumn)->checkState() == 0 )
621 if ( this->
item(iRow, iColumn)->checkState() == 0 )
641 for (
int k = 0; k < SelectedRanges.
size(); k++ )
661 for (
int i = 1; i < ColumnsNames.
size() - 1; i++ )
663 str += ColumnsNames.
at(i);
666 str += ColumnsNames.
at(ColumnsNames.
size() - 1);
684 for (
int i = 0; i < iRange.
rowCount(); ++i )
690 for (
int j = 0; j < iRange.
columnCount() - 1; ++j )
696 if (
item(i, 0)->checkState() == 0 )
710 istr += t_item->
text();
724 istr += t_item->
text();
737 std::string iTraceNameID, Qt::CheckState iState)
740 iTraceNameID.c_str() );
742 if ( !ListSelectedTracesID.
empty() )
744 for (
int i = 0; i < ListSelectedTracesID.
size(); i++ )
747 iTraceName, iState,
false);
753 std::cout <<
"The list of selected Traces ID is empty";
754 std::cout <<
"Debug: In " << __FILE__ <<
", line " << __LINE__;
755 std::cout << std::endl;
763 std::string iTraceNameID,
764 Qt::CheckState iState)
767 iTraceNameID.c_str() );
769 if ( !ListSelectedTracesID.
empty() )
771 for (
int i = 0; i < ListSelectedTracesID.
size(); i++ )
780 std::cout <<
"The list of selected Traces ID is empty";
781 std::cout <<
"Debug: In " << __FILE__ <<
", line " << __LINE__;
782 std::cout << std::endl;
790 const std::vector< std::string > & iValues,
792 const std::string & iColumnNameForTraceID)
796 if ( RowIndex != -1 )
798 for (
unsigned int i = 0; i < iColumnsNames.size(); i++ )
800 int ColumnIndex = this->
findColumnName( iColumnsNames.at(i).c_str() );
801 if ( ColumnIndex != -1 )
807 this->
setItem(RowIndex, ColumnIndex, CellTable);
817 unsigned int iTraceID,
const std::string & iTraceName)
822 if ( RowIndex != -1 )
839 const std::string & iTraceName,
840 const std::string & iColumn)
860 const std::string & iColumnNameTwo,
861 unsigned int iRowIndex)
865 int meanValue = ( ValueOne + ValueTwo ) / 2;
867 return ConvertToString< int >(meanValue);
874 Qt::CheckState iState,
881 int Row = iItem->
row();
891 Qt::CheckState iState,
899 if ( iState == Qt::Checked )
902 QIcon::Normal, QIcon::Off);
907 QIcon::Normal, QIcon::Off);
911 int Row = iItem->
row();
923 Qt::CheckState iState)
925 bool oModification =
false;
929 if ( iState == Qt::Checked )
936 oModification =
true;
946 oModification =
true;
950 return oModification;
956 std::map< unsigned int, std::string >
958 std::string & ioColumnName)
960 std::map< unsigned int, std::string > oMapValues =
961 std::map< unsigned int, std::string >();
963 if ( Ranges.size() > 1 || Ranges[0].columnCount() > 1 )
967 tr(
"Please choose only one column to color code") );
971 unsigned int ColumnIndex = Ranges[0].leftColumn();
974 unsigned int IndexTraceID = this->
findColumnName( iTraceIDName.c_str() );
975 for (
int i = 0; i < NbOfRows; i++ )
977 if ( this->
item(i, ColumnIndex) )
1010 if ( ColumnIndex == -1 )
1012 std::cout <<
"column TimePoint not found in the table widget";
1013 std::cout <<
"Debug: In " << __FILE__ <<
", line " << __LINE__;
1014 std::cout << std::endl;
1017 for (
int i = 0; i < this->
rowCount(); i++ )
1035 for (
int i = 0; i < this->
rowCount(); i++ )
1047 if (IndexColumnTime != -1)
1050 for (
int i =
rowCount()-1; i>=0; --i)
1052 if (iListTPs.
contains(this->item(i, IndexColumnTime)->text() ) )
std::string toStdString() const
QByteArray toByteArray() const
void resizeColumnsToContents()
const T & at(int i) const
bool contains(const QString &str, Qt::CaseSensitivity cs) const
void setSortingEnabled(bool enable)
void setRgb(int r, int g, int b, int a)
manages a map with keys matching fields of the gofiguredatabase Coordinate table and values of the ma...
QString tr(const char *sourceText, const char *disambiguation, int n)
QString fromStdString(const std::string &str)
void append(const T &value)
QString fromUtf8(const char *str, int size)
int toInt(bool *ok, int base) const
void setText(const QString &text)
void addPixmap(const QPixmap &pixmap, Mode mode, State state)
void setTextColor(const QColor &color)
QVariant value(const QString &key, const QVariant &defaultValue) const
void SetField(const std::string &key, const T &value)
convert the value into a string and assign it to the key in the map
void setText(const QString &text)
int indexOf(const QRegExp &rx, int from) const
void setText(const QString &text, Mode mode)
bool connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type)
QString arg(qlonglong a, int fieldWidth, int base, const QChar &fillChar) const
void setTextAlignment(int alignment)
uint toUInt(bool *ok, int base) const