35 #ifndef __QGoDBTraceManager_h
36 #define __QGoDBTraceManager_h
39 #include <QMessageBox>
44 #include "QGoGUILibConfigure.h"
47 #include "vtkLookupTable.h"
75 void SetDatabaseConnection(vtkMySQLDatabase *iDatabaseConnector);
86 virtual std::list< NameWithColorData > GetAllTraceIDsWithColor(
87 vtkMySQLDatabase *iDatabaseConnector, std::string & ioIDToSelect);
94 void UpdateTWAndContainerForDeletedTraces(
95 const std::list< unsigned int > & iTraceIDs);
104 virtual void UpdateTWAndContainerForImportedTraces(
105 const std::vector< int > & iVectorImportedTraces,
106 vtkMySQLDatabase *iDatabaseConnector) = 0;
113 virtual std::list< unsigned int > GetListHighlightedIDs()= 0;
124 virtual std::list< unsigned int > UpdateTheTracesColor(
125 vtkMySQLDatabase *iDatabaseConnector) = 0;
132 virtual void DeleteCheckedTraces(vtkMySQLDatabase *iDatabaseConnector) = 0;
143 void UpdateCollectionID(vtkMySQLDatabase *iDatabaseConnector,
144 const std::list< unsigned int > & iListTracesIDs,
156 virtual void UpdateBoundingBoxes(vtkMySQLDatabase *iDatabaseConnector,
157 const std::list< unsigned int > & iListTracesIDs,
158 bool UpdateTW =
true);
169 std::list< unsigned int > GetListCollectionIDs(
170 vtkMySQLDatabase *iDatabaseConnector,
171 const std::list< unsigned int > & iListTracesIDs);
181 std::list< unsigned int > GetListTracesIDsFromThisCollectionOf(
182 vtkMySQLDatabase *iDatabaseConnector,
183 const std::list< unsigned int > & iListTraces);
191 std::list< unsigned int > GetListTracesIDsBelongingToCollectionIDs(
192 vtkMySQLDatabase *iDatabaseConnector,
193 const std::list<unsigned int>& iListCollectionIDs);
201 void DisplayInfoForExistingTraces(vtkMySQLDatabase *iDatabaseConnector,
202 const std::list< unsigned int >& iListTraces);
209 std::list< unsigned int > GetLastCreatedTracesIDs(
210 vtkMySQLDatabase *iDatabaseConnector,
int iNumberOfTracesIDs);
222 void SetCurrentTimePoint(
int* iTimePoint);
235 void CheckShowRows();
237 void UpdateLastSelectedOneAsCollection();
244 void TraceColorToChange();
250 void CheckedTracesToDelete();
256 void NeedToGoToTheLocation(
int XCoord,
int YCoord,
int ZCoord,
int TCoord);
262 void NewCollectionFromCheckedTraces(std::list< unsigned int > );
264 void CheckedTracesToAddToSelectedCollection(std::list< unsigned int > );
266 void NeedToGetDatabaseConnection();
268 void DBConnectionNotNeededAnymore();
275 void AddNewTraceIDInTS(std::pair<std::string, QColor> iTraceToAddData);
277 void PrintMessage(
QString iMessage,
int iTimeOut = 0);
305 virtual void DisplayInfoForAllTraces(vtkMySQLDatabase *iDatabaseConnector) = 0;
307 virtual void DisplayInfoForTracesForSpecificTPs(
308 vtkMySQLDatabase *iDatabaseConnector,
309 const std::list<unsigned int>& iListTPs) = 0;
316 virtual void DisplayInfoForLastCreatedTrace(vtkMySQLDatabase *iDatabaseConnector) = 0;
324 virtual void DisplayInfoForExistingTrace(vtkMySQLDatabase *iDatabaseConnector,
332 std::string GetTheNameIDFromName(std::string iName);
339 void SetInfo(
unsigned int iImgSessionID,
QWidget *iParent);
344 virtual void SetCollectionsTraceNames() = 0;
351 int GetLastCreatedTraceID(vtkMySQLDatabase *iDatabaseConnector);
358 double * GetVectorFromQColor(
QColor iColor);
371 template<
typename C,
typename S >
373 vtkMySQLDatabase* iDatabaseConnector, std::vector<int> iVectIDs,
374 C *iContainerForVisu)
376 std::list<S> list_of_traces =
377 GetTracesInfoFromDBForVisuContainer( list_of_traces,
378 iDatabaseConnector, this->m_TraceName, this->m_CollectionName,
379 this->m_ImgSessionID, -1, iVectIDs);
381 typename std::list<S>::iterator it = list_of_traces.begin();
383 while ( it != list_of_traces.end() )
385 iContainerForVisu->Insert(*it);
402 template<
typename T >
404 vtkMySQLDatabase *iDatabaseConnector,
405 Qt::CheckState iState,
406 int iIndexShowColumn = 0)
409 iTWContainer->GetContainerLoadedWithAllFromDB(iDatabaseConnector);
411 std::list< std::pair< std::string, std::string > > ColumnNamesAndToolTips =
412 iTWContainer->GetListColumnsNamesAndToolTipsForTableWidget();
413 this->m_Table->DisplayInitialContent(
415 iTWContainer->GetIndexForGroupColor(this->m_TraceName),
416 iTWContainer->GetIndexForGroupColor(this->m_CollectionName),
417 this->m_TraceName, this->m_CollectionName, ColumnNamesAndToolTips,
418 iState, iIndexShowColumn);
421 template<
typename T >
423 vtkMySQLDatabase *iDatabaseConnector,
424 Qt::CheckState iState,
425 const std::list<unsigned int> & iListTPs,
426 int iIndexShowColumn = 0)
431 iTWContainer->GetContainerLoadedWithAllFromDB(iDatabaseConnector, iListTPs);
433 std::list< std::pair< std::string, std::string > > ColumnNamesAndToolTips =
434 iTWContainer->GetListColumnsNamesAndToolTipsForTableWidget();
437 this->m_Table->DisplayInitialContent(
439 iTWContainer->GetIndexForGroupColor(this->m_TraceName),
440 iTWContainer->GetIndexForGroupColor(this->m_CollectionName),
441 this->m_TraceName, this->m_CollectionName, ColumnNamesAndToolTips,
442 iState, iIndexShowColumn);
454 template<
typename T >
456 vtkMySQLDatabase *iDatabaseConnector)
458 int TraceID = this->GetLastCreatedTraceID(iDatabaseConnector);
460 iTWContainer->GetContainerForOneSpecificTrace(iDatabaseConnector,
467 bool sorting = this->m_Table->isSortingEnabled();
470 this->m_Table->setSortingEnabled(
false);
473 this->m_Table->InsertOnlyOneNewRow(RowContainer,
474 iTWContainer->GetIndexForGroupColor(this->m_TraceName),
475 iTWContainer->GetIndexForGroupColor(this->m_CollectionName),
476 this->m_TraceName, this->m_CollectionName);
480 this->m_Table->setSortingEnabled(
true);
494 template<
typename T >
496 vtkMySQLDatabase *iDatabaseConnector,
502 iTWContainer->GetContainerForOneSpecificTrace(iDatabaseConnector,
504 this->m_Table->UpdateRow(RowContainer,
505 iTWContainer->GetIndexForGroupColor(this->m_TraceName),
506 iTWContainer->GetIndexForGroupColor(this->m_CollectionName),
507 this->m_TraceName, this->m_CollectionName, iTraceID);
530 template<
typename T >
532 unsigned int iXCoordMin,
unsigned int iYCoordMin,
unsigned int iZCoordMin,
533 unsigned int iTCoord,
unsigned int iXCoordMax,
unsigned int iYCoordMax,
535 vtkMySQLDatabase *iDatabaseConnector, T & iTrace,
unsigned int iCollectionID,
536 unsigned int iTCoordMax = 0)
538 this->SetTraceBoundingBoxAndPoints< T >(iXCoordMin, iYCoordMin, iZCoordMin, iTCoord,
539 iXCoordMax, iYCoordMax, iZCoordMax, iTraceNodes, iDatabaseConnector, iTrace,
542 return this->m_CollectionOfTraces->CreateNewTraceInDB< T >(iTrace,
543 iDatabaseConnector, iColor, iCollectionID);
546 template<
typename T >
548 unsigned int iYCoordMin,
549 unsigned int iZCoordMin,
550 unsigned int iTCoord,
551 unsigned int iXCoordMax,
552 unsigned int iYCoordMax,
553 unsigned int iZCoordMax,
554 vtkPolyData *iTraceNodes,
555 vtkMySQLDatabase *iDatabaseConnector,
557 unsigned int iTCoordMax = 0)
560 iYCoordMin, iZCoordMin, iTCoord);
563 if ( iTCoordMax == 0 )
572 iYCoordMax, iZCoordMax, TCoord);
573 iTrace.SetTheDataFromTheVisu(iDatabaseConnector, iTraceNodes,
574 coord_min, coord_max);
586 template<
typename T >
588 vtkMySQLDatabase *iDatabaseConnector)
590 this->DisplayInfoForAllTraces(iDatabaseConnector);
592 std::vector< int > VectorIDs = iTWContainer->GetAllTraceIDsInContainer();
593 std::list<unsigned int> ListIDs(VectorIDs.begin(), VectorIDs.end());
594 this->GetTracesInfoFromDBAndModifyContainerForVisu(iDatabaseConnector,ListIDs);
599 template<
typename C>
601 vtkMySQLDatabase *iDatabaseConnector,
602 C* iContainerForVisu,
603 const std::list<unsigned int> & iListTPs)
605 this->DisplayInfoForTracesForSpecificTPs( iDatabaseConnector, iListTPs);
607 std::list<unsigned int> ListIDs =
608 this->m_CollectionOfTraces->GetTraceIDsBelongingToListTimePoints(
609 iDatabaseConnector, iListTPs);
611 if(ListIDs.size() > 0)
613 this->GetTracesInfoFromDBAndModifyContainerForVisu(iDatabaseConnector,ListIDs);
617 template<
typename C>
619 vtkMySQLDatabase *iDatabaseConnector,
620 C* iContainerForVisu,
621 const std::list<unsigned int> & iListTPs)
623 std::list<unsigned int> ListIDs =
624 this->m_CollectionOfTraces->GetTraceIDsBelongingToListTimePoints(
625 iDatabaseConnector, iListTPs);
627 iContainerForVisu->Clear(ListIDs);
630 std::list<unsigned int>::const_iterator iter = iListTPs.
begin();
632 while (iter != iListTPs.end() )
635 temp.
setNum(static_cast<int>(*iter));
640 this->m_Table->DeleteRowsWithSpecificTimePoints(StrgListTPs);
653 template<
typename T >
655 const std::vector< int > & iVectorTraceIDs,
656 vtkMySQLDatabase *iDatabaseConnector)
658 this->m_Table->setSortingEnabled(
false);
663 std::list< unsigned int > ListTraceIDs(iVectorTraceIDs.begin(), iVectorTraceIDs.end() );
664 this->GetTracesInfoFromDBAndModifyContainerForVisu(
665 iDatabaseConnector, ListTraceIDs);
668 std::list< unsigned int >::iterator iter = ListTraceIDs.begin();
670 while ( iter != ListTraceIDs.end() )
673 iTWContainer->GetContainerForOneSpecificTrace(iDatabaseConnector,
675 this->m_Table->InsertOnlyOneNewRow(RowContainer,
676 iTWContainer->GetIndexForGroupColor(this->m_TraceName),
677 iTWContainer->GetIndexForGroupColor(this->m_CollectionName),
678 this->m_TraceName, this->m_CollectionName);
681 this->m_Table->setSortingEnabled(
true);
682 this->m_Table->resizeColumnsToContents();
695 template<
typename T,
typename C >
697 vtkMySQLDatabase *iDatabaseConnector, C *iContainerInfoForVisu)
699 std::list< unsigned int > oListOfCollectionOfIDs = std::list< unsigned int >();
700 std::list< unsigned int > ListTracesIDs;
701 ListTracesIDs = iContainerInfoForVisu->
702 UpdateAllHighlightedElementsWithGivenColor(this->m_SelectedColorData->second);
703 if ( ListTracesIDs.empty() )
707 tr(
"Please select at least one %1 for the color to be changed")
708 .arg( this->m_TraceName.c_str() ) );
713 std::list< unsigned int >::iterator iter = ListTracesIDs.begin();
714 while ( iter != ListTracesIDs.end() )
716 this->m_CollectionOfTraces->ChangeColorForTrace< T >(*iter,
717 *this->m_SelectedColorData,
719 this->DisplayInfoForExistingTrace(iDatabaseConnector, *iter);
722 oListOfCollectionOfIDs = this->m_CollectionOfTraces->
723 GetListTracesIDsFromThisCollectionOf(iDatabaseConnector, ListTracesIDs);
725 return oListOfCollectionOfIDs;
735 template<
typename T >
737 T **iMemberContainerForVisu)
739 *iMemberContainerForVisu = iContainerForVisu;
741 SIGNAL( TracePicked(uint, Qt::CheckState) ),
743 SLOT( CheckTheTraceInTW(uint, Qt::CheckState) ) );
746 SIGNAL( TraceVisibilityChanged(uint, Qt::CheckState) ),
748 SLOT ( ShowTheTraceInTW(uint, Qt::CheckState) ) );
751 SIGNAL( ModifyHighlightListTraces(
QStringList,Qt::CheckState) ),
752 *iMemberContainerForVisu,
753 SLOT ( UpdateElementHighlightingWithGivenTraceIDs(
QStringList,
756 SIGNAL( ModifyVisibilityListTraces(
QStringList,Qt::CheckState) ),
757 *iMemberContainerForVisu,
758 SLOT ( UpdateElementVisibilityWithGivenTraceIDs(
QStringList,
776 T *iContainerForVisu,
777 std::list<unsigned int> iListTracesToDelete = std::list<unsigned int>(),
778 bool DeleteHighlightedTraces =
true)
780 std::list< unsigned int > ListTracesIDsToDelete;
781 if (DeleteHighlightedTraces)
783 ListTracesIDsToDelete = iContainerForVisu->GetHighlightedElementsTraceID();
784 iContainerForVisu->DeleteAllHighlightedElements();
788 ListTracesIDsToDelete = iListTracesToDelete;
789 std::list<unsigned int>::iterator iter = iListTracesToDelete.begin();
790 while( iter != iListTracesToDelete.end() )
792 iContainerForVisu->DeleteElement(*iter);
796 this->m_CollectionOfTraces->DeleteTracesInDB(
797 ListTracesIDsToDelete, iDatabaseConnector);
798 this->m_Table->DeleteCheckedRows(this->m_TraceNameID, ListTracesIDsToDelete);
812 std::string ColumnName =
"";
813 std::map<unsigned int, std::string> Values;
814 m_IsColorCodingOn = IsChecked;
818 Values = this->m_Table->GetTraceIDAndColumnsValues(
819 this->m_TraceNameID, ColumnName);
821 vtkLookupTable* LUT = NULL;
823 bool IsRandomIncluded =
824 (ColumnName == this->m_TraceNameID) ||
825 (ColumnName == this->m_CollectionNameID);
829 IsRandomIncluded, this->m_Table );
831 switch ( UserColorway )
834 iContainerForVisu->SetColorCode( ColumnName,Values );
838 iContainerForVisu->SetRandomColor(ColumnName,Values );
842 iContainerForVisu->SetColorCode( ColumnName,Values );
843 iContainerForVisu->SetLookupTableForColorCoding(LUT);
848 m_IsColorCodingOn = !IsChecked;
854 m_IsColorCodingOn = IsChecked;
855 iContainerForVisu->SetColorCode( ColumnName, Values );
867 T* iContainerForVisu, vtkMySQLDatabase* iDatabaseConnector,
868 const std::list<unsigned int> & iListTraceIDs)
870 typedef typename T::MultiIndexContainerElementType Structure;
871 std::list<Structure> list_of_traces =
872 this->m_CollectionOfTraces->GetListStructureFromDB<Structure>(
873 iDatabaseConnector, this->m_ImgSessionID, iListTraceIDs);
874 typename std::list< Structure >::iterator it = list_of_traces.begin();
876 while ( it != list_of_traces.end() )
878 iContainerForVisu->Insert(*it);
883 virtual void AddActionsContextMenu(
QMenu *iMenu);
885 void AddGeneralActionsContextMenu(
QMenu *iMenu);
887 void AddSpecificActionsForContourMesh(
QMenu *iMenu);
889 virtual void AddActionForAddingCheckedTracesToCollection();
895 virtual void GetTracesInfoFromDBAndModifyContainerForVisu(
896 vtkMySQLDatabase* iDatabaseConnector,
897 std::list<unsigned int> iListTraceIDs = std::list< unsigned int >())= 0;
900 bool CheckThatThereAreTracesToDelete(
const std::list<unsigned int> & iListTracesIDToDelete);
908 void CreateContextMenu(
const QPoint & iPos);
910 void CheckSelectedRows();
912 void UncheckSelectedRows();
914 void ShowSelectedRows();
916 void HideSelectedRows();
923 virtual void ChangeTraceColor();
925 void DeleteTracesFromContextMenu();
933 void CheckTheTraceInTW(
unsigned int iTraceID, Qt::CheckState iState);
941 void ShowTheTraceInTW(
unsigned int iTraceID, Qt::CheckState iState);
950 virtual void CreateCorrespondingCollection();
952 virtual void AddToSelectedCollection();
959 virtual void UpdateHighlightedElementsInVisuContainer(
int iTraceID) = 0;
966 virtual void UpdateVisibleElementsInVisuContainer(
int iTraceID) = 0;
974 virtual void SetColorCoding(
bool IsChecked)= 0;
983 void ShowOnlyRowsForCurrentTimePoint(
bool IsChecked);
std::string m_CollectionNameID
void SetColorCodingTemplate(T *iContainerForVisu, bool IsChecked)
get a map with the tracesIDs as keys and the values of the selected columns as values for all traces ...
void DisplayInfoAndLoadVisuContainerWithAllTraces(T *iTWContainer, vtkMySQLDatabase *iDatabaseConnector)
get all the data from the database to load all the traces for the imagingsession into the table widge...
std::string m_CollectionName
void DisplayInfoAndLoadVisuContainerWithAllTracesForSpecificTPs(vtkMySQLDatabase *iDatabaseConnector, C *iContainerForVisu, const std::list< unsigned int > &iListTPs)
Abstract class inherited by QGoDBContourManager,Mesh,Track,Lineage.
NameWithColorData * m_SelectedColorData
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)
std::string m_CollectionOf
void DisplayInfoForLastCreatedTraceTemplate(T *iTWContainer, vtkMySQLDatabase *iDatabaseConnector)
fill the TWContainer with the data needed from the database for the last created trace and insert a n...
NameWithColorData * m_SelectedCollectionData
void DisplayInfoForTracesForSpecificTPsTemplate(T *iTWContainer, vtkMySQLDatabase *iDatabaseConnector, Qt::CheckState iState, const std::list< unsigned int > &iListTPs, int iIndexShowColumn=0)
void UpdateTWAndContainerWithImportedTracesTemplate(T *iTWContainer, const std::vector< int > &iVectorTraceIDs, vtkMySQLDatabase *iDatabaseConnector)
update for the imported traces the table widget and the database info of the container for visu...
void setText(const QString &text)
void GetTracesInfoFromDBAndModifyContainerForVisuTemplate(T *iContainerForVisu, vtkMySQLDatabase *iDatabaseConnector, const std::list< unsigned int > &iListTraceIDs)
get the info needed from the database to fill the container for visu
void DeleteTracesTemplate(vtkMySQLDatabase *iDatabaseConnector, T *iContainerForVisu, std::list< unsigned int > iListTracesToDelete=std::list< unsigned int >(), bool DeleteHighlightedTraces=true)
delete the traces from the database, the TW and the container for visu
void RemoveTracesFromTWAndContainerForVisuForSpecificTPsTemplate(vtkMySQLDatabase *iDatabaseConnector, C *iContainerForVisu, const std::list< unsigned int > &iListTPs)
void DisplayInfoForExistingTraceTemplate(T *iTWContainer, vtkMySQLDatabase *iDatabaseConnector, int iTraceID)
fill the TWContainer with the data needed from the database for the trace with the iTraceID and updat...
std::list< unsigned int > UpdateTheTracesColorTemplate(vtkMySQLDatabase *iDatabaseConnector, C *iContainerInfoForVisu)
update the visu container, the database and the TW with the user selected color for the highlighted t...
void SetTraceBoundingBoxAndPoints(unsigned int iXCoordMin, unsigned int iYCoordMin, unsigned int iZCoordMin, unsigned int iTCoord, unsigned int iXCoordMax, unsigned int iYCoordMax, unsigned int iZCoordMax, vtkPolyData *iTraceNodes, vtkMySQLDatabase *iDatabaseConnector, T &iTrace, unsigned int iTCoordMax=0)
unsigned int CreateNewTraceInDBFromVisu(unsigned int iXCoordMin, unsigned int iYCoordMin, unsigned int iZCoordMin, unsigned int iTCoord, unsigned int iXCoordMax, unsigned int iYCoordMax, unsigned int iZCoordMax, vtkPolyData *iTraceNodes, NameWithColorData iColor, vtkMySQLDatabase *iDatabaseConnector, T &iTrace, unsigned int iCollectionID, unsigned int iTCoordMax=0)
create the trace row with the related data provided by the visu, iTCoordMax is equal to 0 as for cont...
std::string m_CollectionOfID
void GetTracesInfoFromDBAndModifyContainerForVisu(vtkMySQLDatabase *iDatabaseConnector, std::vector< int > iVectIDs, C *iContainerForVisu)
QString & setNum(short n, int base)
std::string m_TraceNameID
std::string m_LastSelectedTraceAsCollection
static ColorWay GetColorWay(std::string iTraceName, vtkLookupTable **ioLUT, bool iRandomIncluded, QWidget *iiParent=0)
get the way the user wants its traces to be colorcoded and the LUT if he chooses the LUT ...
std::pair< std::string, QColor > NameWithColorData
std::pair< unsigned int, QColor > IDWithColorData
GoDBTableWidgetContainer::TWContainerType TWContainerType
bool connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type)
QMenu * m_CheckedTracesMenu
vtkMySQLDatabase * m_DatabaseConnector
void DisplayInfoForAllTracesTemplate(T *iTWContainer, vtkMySQLDatabase *iDatabaseConnector, Qt::CheckState iState, int iIndexShowColumn=0)
fill the TWContainer with all the data needed from the database and display them into the m_Table ...
this class handles the interaction between the database and the children of QGoDBTraceManager ...
bool m_IsShowOnlyCurrentTimePointOn
GoDBCollectionOfTraces * m_CollectionOfTraces
void SetTracesInfoContainerForVisuTemplate(T *iContainerForVisu, T **iMemberContainerForVisu)
set the iMemberContainerInfoForVisu to the iContainerForVisu and create the connections SLOT/SIGNAL ...