diff --git a/src/channelmanager.cpp b/src/channelmanager.cpp --- a/src/channelmanager.cpp +++ b/src/channelmanager.cpp @@ -1,5 +1,5 @@ /* - Copyright © 2016 Hasan Yavuz Özderya + Copyright © 2017 Hasan Yavuz Özderya This file is part of serialplot. @@ -17,30 +17,27 @@ along with serialplot. If not, see . */ -#include #include +#include + #include "channelmanager.h" #include "setting_defines.h" ChannelManager::ChannelManager(unsigned numberOfChannels, unsigned numberOfSamples, QObject *parent) : - QObject(parent) + QObject(parent), + _infoModel(numberOfChannels) { _numOfChannels = numberOfChannels; _numOfSamples = numberOfSamples; - QStringList channelNamesList; - for (unsigned int i = 0; i < numberOfChannels; i++) { channelBuffers.append(new FrameBuffer(numberOfSamples)); - channelNamesList << QString("Channel %1").arg(i+1); } - _channelNames.setStringList(channelNamesList); - - connect(&_channelNames, &QStringListModel::dataChanged, - this, &ChannelManager::onChannelNameDataChange); + connect(&_infoModel, &ChannelInfoModel::dataChanged, + this, &ChannelManager::onChannelInfoChanged); } ChannelManager::~ChannelManager() @@ -71,7 +68,6 @@ void ChannelManager::setNumOfChannels(un for (unsigned int i = 0; i < number - oldNum; i++) { channelBuffers.append(new FrameBuffer(_numOfSamples)); - addChannelName(QString("Channel %1").arg(oldNum+i+1)); } } else if(number < oldNum) @@ -80,10 +76,12 @@ void ChannelManager::setNumOfChannels(un for (unsigned int i = oldNum-1; i > number-1; i--) { delete channelBuffers.takeLast(); - _channelNames.removeRow(i); } } + _numOfChannels = number; + _infoModel.setNumOfChannels(number); + emit numOfChannelsChanged(number); } @@ -104,39 +102,62 @@ FrameBuffer* ChannelManager::channelBuff return channelBuffers[channel]; } -QStringListModel* ChannelManager::channelNames() +ChannelInfoModel* ChannelManager::infoModel() { - return &_channelNames; + return &_infoModel; } QString ChannelManager::channelName(unsigned channel) { - return _channelNames.data(_channelNames.index(channel, 0), Qt::DisplayRole).toString(); + return _infoModel.data(_infoModel.index(channel, ChannelInfoModel::COLUMN_NAME), + Qt::DisplayRole).toString(); } -void ChannelManager::setChannelName(unsigned channel, QString name) +QStringList ChannelManager::channelNames() { - _channelNames.setData(_channelNames.index(channel, 0), QVariant(name), Qt::DisplayRole); + QStringList list; + for (unsigned ci = 0; ci < _numOfChannels; ci++) + { + list << channelName(ci); + } + return list; } -void ChannelManager::addChannelName(QString name) +void ChannelManager::onChannelInfoChanged(const QModelIndex & topLeft, + const QModelIndex & bottomRight, + const QVector & roles) { - _channelNames.insertRow(_channelNames.rowCount()); - setChannelName(_channelNames.rowCount()-1, name); -} - -void ChannelManager::onChannelNameDataChange(const QModelIndex & topLeft, - const QModelIndex & bottomRight, - const QVector & roles) -{ - Q_UNUSED(roles); int start = topLeft.row(); int end = bottomRight.row(); + int col = topLeft.column(); - // TODO: maybe check `roles` parameter, can't think of a reason for current use case - for (int i = start; i <= end; i++) + for (int ci = start; ci <= end; ci++) { - emit channelNameChanged(i, channelName(i)); + for (auto role : roles) + { + switch (role) + { + case Qt::EditRole: + if (col == ChannelInfoModel::COLUMN_NAME) + { + emit channelNameChanged(ci, channelName(ci)); + } + break; + case Qt::ForegroundRole: + if (col == ChannelInfoModel::COLUMN_NAME) + { + // TODO: emit channel color changed + } + break; + case Qt::CheckStateRole: + if (col == ChannelInfoModel::COLUMN_VISIBILITY) + { + // TODO: emit visibility + } + break; + } + } + // emit channelNameChanged(i, channelName(i)); } } @@ -147,26 +168,10 @@ void ChannelManager::addChannelData(unsi void ChannelManager::saveSettings(QSettings* settings) { - settings->beginGroup(SettingGroup_Channels); - settings->beginWriteArray(SG_Channels_Channel); - for (unsigned i = 0; i < numOfChannels(); i++) - { - settings->setArrayIndex(i); - settings->setValue(SG_Channels_Name, channelName(i)); - } - settings->endArray(); - settings->endGroup(); + _infoModel.saveSettings(settings); } void ChannelManager::loadSettings(QSettings* settings) { - settings->beginGroup(SettingGroup_Channels); - settings->beginReadArray(SG_Channels_Channel); - for (unsigned i = 0; i < numOfChannels(); i++) - { - settings->setArrayIndex(i); - setChannelName(i, settings->value(SG_Channels_Name, channelName(i)).toString()); - } - settings->endArray(); - settings->endGroup(); + _infoModel.loadSettings(settings); }