Changeset - c1f7d94b72b7
[Not reviewed]
default
0 2 1
Hasan Yavuz Ă–ZDERYA - 10 years ago 2016-04-25 17:44:19
hy@ozderya.net
added icon for generic (rs232) ports
3 files changed with 5 insertions and 0 deletions:
0 comments (0 inline, 0 general)
misc/icons.qrc
Show inline comments
 
<RCC>
 
    <qresource prefix="/">
 
        <file>usb_icon.png</file>
 
        <file>bluetooth_icon.png</file>
 
        <file>rs232_icon.png</file>
 
    </qresource>
 
</RCC>
misc/rs232_icon.png
Show inline comments
 
new file 100644
 
binary diff not shown
Show images
src/portlist.cpp
Show inline comments
 
@@ -15,96 +15,100 @@
 

	
 
  You should have received a copy of the GNU General Public License
 
  along with serialplot.  If not, see <http://www.gnu.org/licenses/>.
 
*/
 

	
 
#include <QVariant>
 
#include <QIcon>
 
#include <QtDebug>
 

	
 
#include "portlist.h"
 

	
 
PortListItem::PortListItem(QString name, QString description, quint16 vid, quint16 pid)
 
{
 
    construct(name, description, vid, pid);
 
}
 

	
 
PortListItem::PortListItem(QSerialPortInfo* portInfo)
 
{
 
    if (portInfo->hasProductIdentifier())
 
    {
 
        construct(portInfo->portName(),
 
                  portInfo->description(),
 
                  portInfo->vendorIdentifier(),
 
                  portInfo->productIdentifier());
 
    }
 
    else
 
    {
 
        construct(portInfo->portName());
 
    }
 
}
 

	
 
void PortListItem::construct(QString name, QString description, quint16 vid, quint16 pid)
 
{
 
    QString text = name;
 
    if (!description.isEmpty())
 
    {
 
        text += QString(" ") + description;
 
    }
 
    if (vid && pid)
 
    {
 
        text += QString("[%1:").arg(vid, 4, 16, QChar('0'));
 
        text += QString("%1]").arg(pid, 4, 16, QChar('0'));
 
        setIcon(QIcon(":/usb_icon.png"));
 
    }
 
    else if (name.contains("rfcomm"))
 
    {
 
        setIcon(QIcon(":/bluetooth_icon.png"));
 
    }
 
    else
 
    {
 
        setIcon(QIcon(":/rs232_icon.png"));
 
    }
 
    setText(text);
 
    setData(name, PortNameRole);
 
}
 

	
 
QString PortListItem::portName()
 
{
 
    return data(PortNameRole).toString();
 
}
 

	
 
PortList::PortList(QObject* parent) :
 
    QStandardItemModel(parent)
 
{
 
    loadPortList();
 

	
 
    // we have to use macro based notation to be able to disconnect
 
    QObject::connect(this, SIGNAL(rowsInserted(const QModelIndex &, int, int)),
 
                     this, SLOT(onRowsInserted(QModelIndex, int, int)));
 
}
 

	
 
void PortList::loadPortList()
 
{
 
    clear();
 

	
 
    disconnect(this, SLOT(onRowsInserted(QModelIndex,int,int)));
 
    for (auto portInfo : QSerialPortInfo::availablePorts())
 
    {
 
        appendRow(new PortListItem(&portInfo));
 
    }
 
    for (auto portName : userEnteredPorts)
 
    {
 
        appendRow(new PortListItem(portName));
 
    }
 
    QObject::connect(this, SIGNAL(rowsInserted(const QModelIndex &, int, int)),
 
                     this, SLOT(onRowsInserted(QModelIndex, int, int)));
 
}
 

	
 
int PortList::indexOf(QString portText)
 
{
 
    for (int i = 0; i < rowCount(); i++)
 
    {
 
        if (item(i)->text() == portText)
 
        {
 
            return i;
 
        }
 
    }
 
    return -1; // not found
 
}
 

	
0 comments (0 inline, 0 general)