Added better filtration when scanning remotes, only update the affected protocols. Closes #88

This commit is contained in:
Stefan Persson 2011-12-19 15:48:16 +01:00
parent 8e377a12bc
commit 2d17564de3
5 changed files with 45 additions and 3 deletions

View file

@ -21,3 +21,17 @@ DeviceSetting::DeviceSetting(Device *device, QWidget *parent)
DeviceSetting::~DeviceSetting()
{
}
void DeviceSetting::addProtocolMatch( const QString &protocol, const QString &model ){
QString protocolmodel; //concat to one string
protocolmodel.append(protocol).append(model);
acceptedProtocolModel << protocolmodel;
}
void DeviceSetting::setProtocolValue( const QString &name, const QString &value, const QString &protocol, const QString &model ){
QString protocolmodel; //concat to one string
protocolmodel.append(protocol).append(model);
if(acceptedProtocolModel.contains(protocolmodel)){ //protocol not set yet, or equal
this->setValue(name, value);
}
}

View file

@ -29,10 +29,18 @@ public:
public slots:
virtual void saveParameters() = 0;
void addProtocolMatch( const QString &protocol, const QString &model );
private slots:
void setProtocolValue( const QString &name, const QString &value, const QString &protocol, const QString &model );
virtual void setValue( const QString &name, const QString &value ) = 0;
protected:
Device *p_device;
private:
QList<QString> acceptedProtocolModel;
};
#endif

View file

@ -173,10 +173,30 @@ EditDeviceDialog::EditDeviceDialog(Device *device, QWidget *parent, Qt::WFlags f
((DeviceSettingArctechSelflearning *)d->deviceSettings[9])->setUnitMinMax(1,15);
foreach( DeviceSetting *s, d->deviceSettings ) {
connect(d->filteredModel, SIGNAL(setParameter(const QString&, const QString&)), s, SLOT(setValue(const QString&, const QString&)));
connect(d->filteredModel, SIGNAL(setParameter(const QString&, const QString&, const QString&, const QString&)), s, SLOT(setProtocolValue(const QString&, const QString&, const QString&, const QString&)));
d->settingsLayout->addWidget( s );
}
for (int i=0; i<d->model->rowCount(QModelIndex()); ++i){
QModelIndex index = d->model->index(i, 0, QModelIndex());
VendorDeviceTreeItem *typeitem = d->model->item(index);
for(int j=0; j<typeitem->childCount(); ++j){
VendorDeviceTreeItem *branditem = typeitem->child(j); //d->model->item(index);
for(int k=0; k<branditem->childCount(); ++k){
VendorDeviceTreeItem *deviceitem = branditem->child(k); //d->model->item(index);
int widget = deviceitem->widget();
QString strModel = deviceitem->deviceModel().section(':', 0, 0);
if (strModel.startsWith("selflearning-")) {
strModel = "selflearning";
}
d->deviceSettings[widget]->addProtocolMatch(deviceitem->deviceProtocol(), strModel);
}
}
}
expandNodes(deviceView);
QModelIndex index = d->filteredModel->mapFromSource(d->model->index( device ));
if (index.isValid()) {

View file

@ -54,7 +54,7 @@ void FilteredDeviceProxyModel::addFilter( const QString &filter ) {
return; //don't scan sensors here
}
else {
emit setParameter(name, value);
emit setParameter(name, value, protocol, model);
}
}
//Make sure we don't add a duplicate

View file

@ -17,7 +17,7 @@ public:
void addFilter( const QString & );
signals:
void setParameter(const QString &name, const QString &value);
void setParameter(const QString &name, const QString &value, const QString &protocol, const QString &model);
protected:
virtual bool filterAcceptsRow ( int source_row, const QModelIndex & source_parent ) const;