1 #include "utility.h"
2 #include "filterutility.h"
3 #include "dbc/dbchandler.h"
4 #include <QSettings>
5
getIdAsInt(QListWidgetItem * item)6 uint32_t FilterUtility::getIdAsInt( QListWidgetItem * item )
7 {
8 return Utility::ParseStringToNum(getId(item));
9 }
10
getId(QString itemText)11 QString FilterUtility::getId( QString itemText )
12 {
13 if (itemText.contains(" "))
14 // Strip away the filter label
15 return itemText.left(itemText.indexOf(" "));
16 else
17 return itemText;
18 }
19
getId(QListWidgetItem * item)20 QString FilterUtility::getId( QListWidgetItem * item )
21 {
22 return getId(item->text());
23 }
24
getGMLanArbitrationId(int32_t id)25 uint32_t FilterUtility::getGMLanArbitrationId(int32_t id)
26 {
27 return (id >> 13) & 0x1FFF;
28 }
29
getGMLanPriorityBits(int32_t id)30 uint32_t FilterUtility::getGMLanPriorityBits(int32_t id)
31 {
32 return (id >> 26) & 0x7;
33 }
34
getGMLanSenderId(int32_t id)35 uint32_t FilterUtility::getGMLanSenderId(int32_t id)
36 {
37 return id & 0x1FFF;
38 }
39
createCheckableFilterItem(uint32_t id,bool checked,QListWidget * parent)40 QListWidgetItem * FilterUtility::createCheckableFilterItem(uint32_t id, bool checked, QListWidget* parent)
41 {
42 QListWidgetItem * thisItem = createFilterItem(id,parent);
43 thisItem->setFlags(thisItem->flags() | Qt::ItemIsUserCheckable);
44 if (checked)
45 thisItem->setCheckState(Qt::Checked);
46 else
47 thisItem->setCheckState(Qt::Unchecked);
48 return thisItem;
49 }
50
createCheckableBusFilterItem(uint32_t id,bool checked,QListWidget * parent)51 QListWidgetItem * FilterUtility::createCheckableBusFilterItem(uint32_t id, bool checked, QListWidget* parent)
52 {
53 QListWidgetItem * thisItem = createBusFilterItem(id,parent);
54 thisItem->setFlags(thisItem->flags() | Qt::ItemIsUserCheckable);
55 if (checked)
56 thisItem->setCheckState(Qt::Checked);
57 else
58 thisItem->setCheckState(Qt::Unchecked);
59 return thisItem;
60 }
61
62
createFilterItem(uint32_t id,QListWidget * parent)63 QListWidgetItem * FilterUtility::createFilterItem(uint32_t id, QListWidget* parent)
64 {
65 QSettings settings;
66 DBCHandler * dbcHandler = DBCHandler::getReference();
67 QListWidgetItem *thisItem = new QListWidgetItem(parent);
68 QString filterItemName = Utility::formatCANID(id);
69
70 //Note, there are multiple filter labeling preferences. There is one in main settings to globally
71 //enable or disable them all. Then each loaded DBC file also can be selected on/off
72 //Both must be enabled for you to see labeling.
73 if (settings.value("Main/FilterLabeling", false).toBool())
74 {
75 // Filter labeling (show interpreted frame names next to the CAN addr ID)
76 MatchingCriteria_t matchingCriteria;
77 DBC_MESSAGE *msg = dbcHandler->findMessageForFilter(id,&matchingCriteria);
78 if (msg != nullptr)
79 {
80 filterItemName.append(" ");
81 filterItemName.append(msg->name);
82
83 // Create tooltip to show the whole name just in case it's too long to fit in the filter window.
84 // Also if the matching criteria is set to GMLAN, show the Arbitration ID as well
85 QString tooltip;
86 if (matchingCriteria == GMLAN)
87 tooltip.append("0x" + QString::number(FilterUtility::getGMLanArbitrationId(id), 16).toUpper().rightJustified(4,'0') + ": ");
88 tooltip.append(msg->name);
89 thisItem->setToolTip(tooltip);
90 }
91 }
92
93 thisItem->setText(filterItemName);
94 return thisItem;
95 }
96
createBusFilterItem(uint32_t id,QListWidget * parent)97 QListWidgetItem * FilterUtility::createBusFilterItem(uint32_t id, QListWidget* parent)
98 {
99 QSettings settings;
100 DBCHandler * dbcHandler = DBCHandler::getReference();
101 QListWidgetItem *thisItem = new QListWidgetItem(parent);
102 QString filterItemName = QStringLiteral("%1").arg(id);
103
104 if (settings.value("Main/FilterLabeling", false).toBool())
105 {
106 // Filter labeling (show interpreted frame names next to the CAN addr ID)
107 MatchingCriteria_t matchingCriteria;
108 DBC_MESSAGE *msg = dbcHandler->findMessageForFilter(id,&matchingCriteria);
109 if (msg != NULL)
110 {
111 filterItemName.append(" ");
112 filterItemName.append(msg->name);
113 }
114 }
115
116 thisItem->setText(filterItemName);
117 return thisItem;
118 }
119