Changeset - cb8b69a0516c
[Not reviewed]
portlist
0 2 0
Hasan Yavuz Ă–ZDERYA - 10 years ago 2015-09-04 18:00:21
hy@ozderya.net
remember user entered port names on reload
2 files changed with 30 insertions and 2 deletions:
0 comments (0 inline, 0 general)
portlist.cpp
Show inline comments
 
@@ -58,35 +58,54 @@ void PortListItem::construct(QString nam
 
    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 portName)
 
{
 
    for (int i = 0; i < rowCount(); i++)
 
    {
 
        if (static_cast<PortListItem*>(item(i))->portName() == portName)
 
        {
 
            return i;
 
        }
 
    }
 
    return -1; // not found
 
}
 

	
 
void PortList::onRowsInserted(QModelIndex parent, int start, int end)
 
{
 
    PortListItem* newItem = static_cast<PortListItem*>(item(start));
 
    QString portName = newItem->text();
 
    newItem->setData(portName, PortNameRole);
 
    userEnteredPorts << portName;
 
}
portlist.h
Show inline comments
 
@@ -8,46 +8,55 @@
 
  the Free Software Foundation, either version 3 of the License, or
 
  (at your option) any later version.
 

	
 
  serialplot is distributed in the hope that it will be useful,
 
  but WITHOUT ANY WARRANTY; without even the implied warranty of
 
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
  GNU General Public License for more details.
 

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

	
 
#ifndef PORTLIST_H
 
#define PORTLIST_H
 

	
 
#include <QStandardItemModel>
 
#include <QStandardItem>
 
#include <QList>
 
#include <QSerialPortInfo>
 

	
 
enum PortListRoles
 
{
 
    PortNameRole = Qt::UserRole  // portName as QString
 
    PortNameRole = Qt::UserRole+1  // portName as QString
 
};
 

	
 
class PortListItem : public QStandardItem
 
{
 
public:
 
    PortListItem(QString name, QString description="", quint16 vid=0, quint16 pid=0);
 
    PortListItem(QSerialPortInfo* portInfo);
 

	
 
    QString portName(); // returns only the port name
 

	
 
private:
 
    // common constructor
 
    void construct(QString name, QString description="", quint16 vid=0, quint16 pid=0);
 
};
 

	
 
class PortList : public QStandardItemModel
 
{
 
    Q_OBJECT
 
public:
 
    PortList(QObject* parent=0);
 

	
 
    void loadPortList();
 
    int indexOf(QString portName); // return -1 if not found
 

	
 
private:
 
    QList<PortListItem*> userEnteredPorts;
 
    QStringList userEnteredPorts;
 

	
 
private slots:
 
    void onRowsInserted(QModelIndex parent, int start, int end);
 
};
 

	
 
#endif // PORTLIST_H
0 comments (0 inline, 0 general)