|  |  |  | @ -1,6 +1,7 @@ | 
			
		
	
		
			
				
					|  |  |  |  | #include "tools/cabana/messageswidget.h" | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | #include <limits> | 
			
		
	
		
			
				
					|  |  |  |  | #include <utility> | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | #include <QCheckBox> | 
			
		
	
		
			
				
					|  |  |  |  | #include <QHBoxLayout> | 
			
		
	
	
		
			
				
					|  |  |  | @ -52,18 +53,18 @@ MessagesWidget::MessagesWidget(QWidget *parent) : menu(new QMenu(this)), QWidget | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |   // signals/slots
 | 
			
		
	
		
			
				
					|  |  |  |  |   QObject::connect(menu, &QMenu::aboutToShow, this, &MessagesWidget::menuAboutToShow); | 
			
		
	
		
			
				
					|  |  |  |  |   QObject::connect(header, &MessageViewHeader::filtersUpdated, model, &MessageListModel::setFilterStrings); | 
			
		
	
		
			
				
					|  |  |  |  |   QObject::connect(header, &MessageViewHeader::customContextMenuRequested, this, &MessagesWidget::headerContextMenuEvent); | 
			
		
	
		
			
				
					|  |  |  |  |   QObject::connect(view->horizontalScrollBar(), &QScrollBar::valueChanged, header, &MessageViewHeader::updateHeaderPositions); | 
			
		
	
		
			
				
					|  |  |  |  |   QObject::connect(suppress_defined_signals, &QCheckBox::stateChanged, can, &AbstractStream::suppressDefinedSignals); | 
			
		
	
		
			
				
					|  |  |  |  |   QObject::connect(can, &AbstractStream::msgsReceived, model, &MessageListModel::msgsReceived); | 
			
		
	
		
			
				
					|  |  |  |  |   QObject::connect(dbc(), &DBCManager::DBCFileChanged, this, &MessagesWidget::dbcModified); | 
			
		
	
		
			
				
					|  |  |  |  |   QObject::connect(UndoStack::instance(), &QUndoStack::indexChanged, this, &MessagesWidget::dbcModified); | 
			
		
	
		
			
				
					|  |  |  |  |   QObject::connect(dbc(), &DBCManager::DBCFileChanged, model, &MessageListModel::dbcModified); | 
			
		
	
		
			
				
					|  |  |  |  |   QObject::connect(UndoStack::instance(), &QUndoStack::indexChanged, model, &MessageListModel::dbcModified); | 
			
		
	
		
			
				
					|  |  |  |  |   QObject::connect(model, &MessageListModel::modelReset, [this]() { | 
			
		
	
		
			
				
					|  |  |  |  |     if (current_msg_id) { | 
			
		
	
		
			
				
					|  |  |  |  |       selectMessage(*current_msg_id); | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  |     view->updateBytesSectionSize(); | 
			
		
	
		
			
				
					|  |  |  |  |     updateTitle(); | 
			
		
	
		
			
				
					|  |  |  |  |   }); | 
			
		
	
		
			
				
					|  |  |  |  |   QObject::connect(view->selectionModel(), &QItemSelectionModel::currentChanged, [=](const QModelIndex ¤t, const QModelIndex &previous) { | 
			
		
	
		
			
				
					|  |  |  |  |     if (current.isValid() && current.row() < model->items_.size()) { | 
			
		
	
	
		
			
				
					|  |  |  | @ -103,9 +104,15 @@ QToolBar *MessagesWidget::createToolBar() { | 
			
		
	
		
			
				
					|  |  |  |  |   return toolbar; | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | void MessagesWidget::dbcModified() { | 
			
		
	
		
			
				
					|  |  |  |  |   num_msg_label->setText(tr("%1 Messages, %2 Signals").arg(dbc()->msgCount()).arg(dbc()->signalCount())); | 
			
		
	
		
			
				
					|  |  |  |  |   model->dbcModified(); | 
			
		
	
		
			
				
					|  |  |  |  | void MessagesWidget::updateTitle() { | 
			
		
	
		
			
				
					|  |  |  |  |   auto stats = std::accumulate( | 
			
		
	
		
			
				
					|  |  |  |  |       model->items_.begin(), model->items_.end(), std::pair<size_t, size_t>(), | 
			
		
	
		
			
				
					|  |  |  |  |       [](const auto &pair, const auto &item) { | 
			
		
	
		
			
				
					|  |  |  |  |         auto m = dbc()->msg(item.id); | 
			
		
	
		
			
				
					|  |  |  |  |         return m ? std::make_pair(pair.first + 1, pair.second + m->sigs.size()) : pair; | 
			
		
	
		
			
				
					|  |  |  |  |       }); | 
			
		
	
		
			
				
					|  |  |  |  |   num_msg_label->setText(tr("%1 Messages (%2 DBC Messages, %3 Signals)") | 
			
		
	
		
			
				
					|  |  |  |  |                       .arg(model->items_.size()).arg(stats.first).arg(stats.second)); | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | void MessagesWidget::selectMessage(const MessageId &msg_id) { | 
			
		
	
	
		
			
				
					|  |  |  | @ -398,7 +405,7 @@ void MessageViewHeader::updateFilters() { | 
			
		
	
		
			
				
					|  |  |  |  |       filters[i] = editors[i]->text(); | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  |   } | 
			
		
	
		
			
				
					|  |  |  |  |   emit filtersUpdated(filters); | 
			
		
	
		
			
				
					|  |  |  |  |   qobject_cast<MessageListModel*>(model())->setFilterStrings(filters); | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | void MessageViewHeader::updateHeaderPositions() { | 
			
		
	
	
		
			
				
					|  |  |  | 
 |