changed the way connections are organized and retrieved by connection window

This commit is contained in:
canpadawan
2016-06-15 18:27:22 +02:00
parent 6d20a0665d
commit 45752d137a
2 changed files with 101 additions and 80 deletions
+89 -65
View File
@@ -1,5 +1,4 @@
#include "canconnection.h" #include "connections/canconnection.h"
#include "canconnectioncontainer.h"
#include "canconnectionmodel.h" #include "canconnectionmodel.h"
CANConnectionModel::CANConnectionModel(QObject *parent) CANConnectionModel::CANConnectionModel(QObject *parent)
@@ -7,11 +6,6 @@ CANConnectionModel::CANConnectionModel(QObject *parent)
{ {
} }
void CANConnectionModel::refreshView()
{
beginResetModel();
endResetModel();
}
QVariant CANConnectionModel::headerData(int section, Qt::Orientation orientation, int role) const QVariant CANConnectionModel::headerData(int section, Qt::Orientation orientation, int role) const
{ {
@@ -41,6 +35,9 @@ QVariant CANConnectionModel::headerData(int section, Qt::Orientation orientation
return QString(tr("Single Wire")); return QString(tr("Single Wire"));
break; break;
case 6: case 6:
return QString(tr("Status"));
break;
case 7:
return QString(tr("Active")); return QString(tr("Active"));
break; break;
} }
@@ -52,97 +49,124 @@ QVariant CANConnectionModel::headerData(int section, Qt::Orientation orientation
return QVariant(); return QVariant();
} }
int CANConnectionModel::rowCount(const QModelIndex &parent) const
{
return buses.count();
}
int CANConnectionModel::columnCount(const QModelIndex &parent) const int CANConnectionModel::columnCount(const QModelIndex &parent) const
{ {
return 7; return 7;
} }
int CANConnectionModel::rowCount(const QModelIndex &parent) const {
int rows=0;
QList<CANConnection*>::const_iterator iter;
for (iter = mConns.begin() ; iter != mConns.end() ; ++iter) {
rows+=(*iter)->getNumBuses();
}
return rows;
}
QVariant CANConnectionModel::data(const QModelIndex &index, int role) const QVariant CANConnectionModel::data(const QModelIndex &index, int role) const
{ {
if (!index.isValid()) if (!index.isValid())
return QVariant(); return QVariant();
if (index.row() >= (buses.count()))
return QVariant();
if (role == Qt::DisplayRole) { if (role == Qt::DisplayRole) {
CANBus bus = buses[index.row()]; int busId;
CANConnection *conn = bus.getContainer()->getRef(); CANConnection *conn_p = getAtIdx(index.row(), busId);
if(!conn_p)
return QVariant();
CANBus bus;
bool ret;
ret = conn_p->getBusSettings(busId, bus);
if(!ret) return QVariant();
switch (index.column()) switch (index.column())
{ {
case 0: //bus case 0: //bus
return QString::number(bus.busNum); return QString::number(busId);
break; break;
case 1: //type case 1: //type
if (conn) return conn->getConnTypeName(); if (conn_p)
else qDebug() << "Tried to show connection type but connection was NULL"; switch (conn_p->getType()) {
break; case CANCon::KVASER: return "KVASER";
case 2: //port case CANCon::SOCKETCAN: return "SocketCAN";
if (conn) return conn->getConnPortName(); case CANCon::GVRET_SERIAL: return "GVRET";
else qDebug() << "Tried to show connection port but connection was NULL"; default: {}
break; }
case 3: //speed else qDebug() << "Tried to show connection type but connection was NULL";
return QString::number(bus.speed); break;
break; case 2: //port
case 4: //Listen Only if (conn_p) return conn_p->getPort();
if (bus.listenOnly) return QString("True"); else qDebug() << "Tried to show connection port but connection was NULL";
else return QString("False"); break;
break; case 3: //speed
case 5: //Single Wire return QString::number(bus.speed);
if (bus.singleWire) return QString("True"); case 4: //Listen Only
else return QString("False"); return (bus.listenOnly) ? "True" : "False";
break; case 5: //Single Wire
case 6: //Active return (bus.singleWire) ? "True" : "False";
if (bus.active) return QString("True"); case 6: //Status
else return QString("False"); return (conn_p->getStatus()==CANCon::CONNECTED) ? "Connected" : "Not Connected";
break; case 7: //Active
default: return (bus.active) ? "True" : "False";
return QVariant(); default: {}
} }
} }
else
return QVariant(); return QVariant();
} }
void CANConnectionModel::addBus(CANBus &bus) void CANConnectionModel::add(CANConnection* pConn_p)
{ {
beginResetModel(); beginResetModel();
buses.append(bus); mConns.append(pConn_p);
endResetModel(); endResetModel();
} }
void CANConnectionModel::removeBus(int busIdx)
{
if (busIdx>=0 && busIdx < buses.count()) {
beginResetModel();
buses.removeAt(busIdx);
endResetModel();
}
}
CANBus* CANConnectionModel::getBus(int bus) void CANConnectionModel::remove(CANConnection* pConn_p)
{ {
if (bus < 0) return NULL; beginResetModel();
if (bus >= buses.count()) return NULL; mConns.removeOne(pConn_p);
return &buses[bus]; endResetModel();
} }
CANBus* CANConnectionModel::findBusByNum(int bus) QList<CANConnection*>& CANConnectionModel::getConnections()
{ {
for (int i = 0; i < buses.count(); i++) return mConns;
{ }
if (buses[i].busNum == bus)
{
return &buses[i]; CANConnection* CANConnectionModel::getAtIdx(int pIdx, int& pBusId) const
{
if (pIdx < 0)
return NULL;
int i=0;
QList<CANConnection*>::const_iterator iter = mConns.begin();
for (iter = mConns.begin() ; iter != mConns.end() ; ++iter) {
if( i <= pIdx && pIdx < i+(*iter)->getNumBuses() ) {
pBusId = pIdx - i;
return (*iter);
} }
i+= (*iter)->getNumBuses();
} }
return NULL; return NULL;
} }
void CANConnectionModel::refreshView()
{
beginResetModel();
endResetModel();
}
+12 -15
View File
@@ -1,13 +1,13 @@
#ifndef CANCONNECTIONMODEL_H #ifndef CANCONNECTIONMODEL_H
#define CANCONNECTIONMODEL_H #define CANCONNECTIONMODEL_H
#include "canconnection.h"
#include "canbus.h"
#include "canconnectioncontainer.h"
#include <QAbstractTableModel> #include <QAbstractTableModel>
class CANConnectionContainer; #include "canbus.h"
#include "connections/canconnection.h"
#include "connectionwindow.h"
class CANConnectionModel : public QAbstractTableModel class CANConnectionModel : public QAbstractTableModel
{ {
@@ -19,24 +19,21 @@ public:
// Header: // Header:
QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override; QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override;
int rowCount(const QModelIndex &parent = QModelIndex()) const override;
int columnCount(const QModelIndex &parent = QModelIndex()) const override; int columnCount(const QModelIndex &parent = QModelIndex()) const override;
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
void addConnection(CANConnectionContainer *conn); int rowCount(const QModelIndex &parent = QModelIndex()) const override;
void removeConnection(CANConnection*);
void addBus(CANBus &bus); void add(CANConnection* pConn_p);
void removeBus(int busIdx); void remove(CANConnection* pConn_p);
CANBus* getBus(int bus);
CANConnection* getConnection(int conn); QList<CANConnection*>& getConnections();
CANConnection* getAtIdx(int, int&) const;
void refreshView(); void refreshView();
private: private:
QList<CANConnectionContainer *> connections; QList<CANConnection*> mConns;
QList<CANBus> buses;
CANBus *findBusByNum(int bus);
}; };
#endif // CANCONNECTIONMODEL_H #endif // CANCONNECTIONMODEL_H