# pragma once 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								# include  <tuple> 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# include  <vector> 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								# include  <QList> 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								# include  <QSet> 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# include  <QStyledItemDelegate> 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# include  <QTableView> 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								# include  "tools/cabana/dbc/dbcmanager.h" 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								# include  "tools/cabana/streams/abstractstream.h" 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								class  BinaryItemDelegate  :  public  QStyledItemDelegate  { 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								public : 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  BinaryItemDelegate ( QObject  * parent ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  void  paint ( QPainter  * painter ,  const  QStyleOptionViewItem  & option ,  const  QModelIndex  & index )  const  override ; 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  bool  hasSignal ( const  QModelIndex  & index ,  int  dx ,  int  dy ,  const  cabana : : Signal  * sig )  const ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  void  drawSignalCell ( QPainter *  painter ,  const  QStyleOptionViewItem  & option ,  const  QModelIndex  & index ,  const  cabana : : Signal  * sig )  const ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  QFont  small_font ,  hex_font ; 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  std : : array < QStaticText ,  256 >  hex_text_table ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  std : : array < QStaticText ,  2 >  bin_text_table ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								} ; 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								class  BinaryViewModel  :  public  QAbstractTableModel  { 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								public : 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  BinaryViewModel ( QObject  * parent )  :  QAbstractTableModel ( parent )  { } 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  void  refresh ( ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  void  updateState ( ) ; 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  void  updateItem ( int  row ,  int  col ,  uint8_t  val ,  const  QColor  & color ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  QVariant  headerData ( int  section ,  Qt : : Orientation  orientation ,  int  role  =  Qt : : DisplayRole )  const  override ; 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  QVariant  data ( const  QModelIndex  & index ,  int  role  =  Qt : : DisplayRole )  const  override ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  int  rowCount ( const  QModelIndex  & parent  =  QModelIndex ( ) )  const  override  {  return  row_count ;  } 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  int  columnCount ( const  QModelIndex  & parent  =  QModelIndex ( ) )  const  override  {  return  column_count ;  } 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  QModelIndex  index ( int  row ,  int  column ,  const  QModelIndex  & parent  =  QModelIndex ( ) )  const  override  { 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  createIndex ( row ,  column ,  ( void  * ) & items [ row  *  column_count  +  column ] ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  Qt : : ItemFlags  flags ( const  QModelIndex  & index )  const  override  { 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  ( index . column ( )  = =  column_count  -  1 )  ?  Qt : : ItemIsEnabled  :  Qt : : ItemIsEnabled  |  Qt : : ItemIsSelectable ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  struct  Item  { 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								    QColor  bg_color  =  QColor ( 102 ,  86 ,  169 ,  255 ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    bool  is_msb  =  false ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    bool  is_lsb  =  false ; 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								    uint8_t  val ; 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								    QList < const  cabana : : Signal  * >  sigs ; 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								    bool  valid  =  false ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } ; 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  std : : vector < Item >  items ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  MessageId  msg_id ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  int  row_count  =  0 ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  const  int  column_count  =  9 ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								} ; 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								class  BinaryView  :  public  QTableView  { 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  Q_OBJECT 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								public : 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  BinaryView ( QWidget  * parent  =  nullptr ) ; 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  void  setMessage ( const  MessageId  & message_id ) ; 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  void  highlight ( const  cabana : : Signal  * sig ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  QSet < const  cabana : : Signal * >  getOverlappingSignals ( )  const ; 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  inline  void  updateState ( )  {  model - > updateState ( ) ;  } 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  QSize  minimumSizeHint ( )  const  override ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								signals : 
 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  void  signalClicked ( const  cabana : : Signal  * sig ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  void  signalHovered ( const  cabana : : Signal  * sig ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  void  editSignal ( const  cabana : : Signal  * origin_s ,  cabana : : Signal  & s ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  void  showChart ( const  MessageId  & id ,  const  cabana : : Signal  * sig ,  bool  show ,  bool  merge ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								private : 
 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  void  addShortcuts ( ) ; 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  void  refresh ( ) ; 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  std : : tuple < int ,  int ,  bool >  getSelection ( QModelIndex  index ) ; 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  void  setSelection ( const  QRect  & rect ,  QItemSelectionModel : : SelectionFlags  flags )  override ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  void  mousePressEvent ( QMouseEvent  * event )  override ; 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  void  mouseMoveEvent ( QMouseEvent  * event )  override ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  void  mouseReleaseEvent ( QMouseEvent  * event )  override ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  void  leaveEvent ( QEvent  * event )  override ; 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  void  highlightPosition ( const  QPoint  & pt ) ; 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  QModelIndex  anchor_index ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  BinaryViewModel  * model ; 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  BinaryItemDelegate  * delegate ; 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  const  cabana : : Signal  * resize_sig  =  nullptr ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  const  cabana : : Signal  * hovered_sig  =  nullptr ; 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  friend  class  BinaryItemDelegate ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								} ;