|  |  |  | @ -14,16 +14,18 @@ | 
			
		
	
		
			
				
					|  |  |  |  | #include "tools/cabana/commands.h" | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | static bool isMessageActive(const MessageId &id) { | 
			
		
	
		
			
				
					|  |  |  |  |   if (auto dummy_stream = dynamic_cast<DummyStream *>(can)) { | 
			
		
	
		
			
				
					|  |  |  |  |     return true; | 
			
		
	
		
			
				
					|  |  |  |  |   } | 
			
		
	
		
			
				
					|  |  |  |  |   if (id.source == INVALID_SOURCE) { | 
			
		
	
		
			
				
					|  |  |  |  |     return false; | 
			
		
	
		
			
				
					|  |  |  |  |   } | 
			
		
	
		
			
				
					|  |  |  |  |   // Check if the message is active based on time difference and frequency
 | 
			
		
	
		
			
				
					|  |  |  |  |   const auto &m = can->lastMessage(id); | 
			
		
	
		
			
				
					|  |  |  |  |   float delta = can->currentSec() - m.ts; | 
			
		
	
		
			
				
					|  |  |  |  |   return (m.freq == 0 && delta < 1.5) || (m.freq > 0 && ((delta - 1.0 / settings.fps) < (5.0 / m.freq))); | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |   if (m.freq < std::numeric_limits<double>::epsilon()) { | 
			
		
	
		
			
				
					|  |  |  |  |     return delta < 1.5; | 
			
		
	
		
			
				
					|  |  |  |  |   } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |   return delta < (5.0 / m.freq) + (1.0 / settings.fps); | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | MessagesWidget::MessagesWidget(QWidget *parent) : menu(new QMenu(this)), QWidget(parent) { | 
			
		
	
	
		
			
				
					|  |  |  | @ -215,8 +217,8 @@ QVariant MessageListModel::data(const QModelIndex &index, int role) const { | 
			
		
	
		
			
				
					|  |  |  |  |     return QVariant::fromValue((void*)(&can->lastMessage(item.id).colors)); | 
			
		
	
		
			
				
					|  |  |  |  |   } else if (role == BytesRole && index.column() == Column::DATA && item.id.source != INVALID_SOURCE) { | 
			
		
	
		
			
				
					|  |  |  |  |     return QVariant::fromValue((void*)(&can->lastMessage(item.id).dat)); | 
			
		
	
		
			
				
					|  |  |  |  |   } else if (role == Qt::ForegroundRole && !item.active) { | 
			
		
	
		
			
				
					|  |  |  |  |     return settings.theme == DARK_THEME ? QApplication::palette().color(QPalette::Text).darker(150) : QColor(Qt::gray); | 
			
		
	
		
			
				
					|  |  |  |  |   } else if (role == Qt::ForegroundRole && !isMessageActive(item.id)) { | 
			
		
	
		
			
				
					|  |  |  |  |     return QApplication::palette().color(QPalette::Disabled, QPalette::Text); | 
			
		
	
		
			
				
					|  |  |  |  |   } else if (role == Qt::ToolTipRole && index.column() == Column::NAME) { | 
			
		
	
		
			
				
					|  |  |  |  |     auto msg = dbc()->msg(item.id); | 
			
		
	
		
			
				
					|  |  |  |  |     auto tooltip = item.name; | 
			
		
	
	
		
			
				
					|  |  |  | @ -335,11 +337,9 @@ bool MessageListModel::filterAndSort() { | 
			
		
	
		
			
				
					|  |  |  |  |   std::vector<Item> items; | 
			
		
	
		
			
				
					|  |  |  |  |   items.reserve(all_messages.size()); | 
			
		
	
		
			
				
					|  |  |  |  |   for (const auto &id : all_messages) { | 
			
		
	
		
			
				
					|  |  |  |  |     bool active = isMessageActive(id); | 
			
		
	
		
			
				
					|  |  |  |  |     if (active || show_inactive_messages) { | 
			
		
	
		
			
				
					|  |  |  |  |     if (show_inactive_messages || isMessageActive(id)) { | 
			
		
	
		
			
				
					|  |  |  |  |       auto msg = dbc()->msg(id); | 
			
		
	
		
			
				
					|  |  |  |  |       Item item = {.id = id, | 
			
		
	
		
			
				
					|  |  |  |  |                   .active = active, | 
			
		
	
		
			
				
					|  |  |  |  |                   .name = msg ? msg->name : UNTITLED, | 
			
		
	
		
			
				
					|  |  |  |  |                   .node = msg ? msg->transmitter : QString()}; | 
			
		
	
		
			
				
					|  |  |  |  |       if (match(item)) | 
			
		
	
	
		
			
				
					|  |  |  | @ -364,9 +364,6 @@ void MessageListModel::msgsReceived(const std::set<MessageId> *new_msgs, bool ha | 
			
		
	
		
			
				
					|  |  |  |  |     if (filterAndSort()) return; | 
			
		
	
		
			
				
					|  |  |  |  |   } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |   for (auto &item : items_) { | 
			
		
	
		
			
				
					|  |  |  |  |     item.active = isMessageActive(item.id); | 
			
		
	
		
			
				
					|  |  |  |  |   } | 
			
		
	
		
			
				
					|  |  |  |  |   // Update viewport
 | 
			
		
	
		
			
				
					|  |  |  |  |   emit dataChanged(index(0, 0), index(rowCount() - 1, columnCount() - 1)); | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
	
		
			
				
					|  |  |  | 
 |