void NodeUpdateProxy::addAddress( const Device::NodePath& parentPath, const Device::AddressSettings& settings, int row) { auto parentnode = parentPath.toNode(&devModel.rootNode()); if(!parentnode) return; // Add in the device impl // Get the device node : // TODO row isn't managed here. const Device::Node& dev_node = devModel.rootNode().childAt(parentPath.at(0)); ISCORE_ASSERT(dev_node.template is<Device::DeviceSettings>()); // Make a full path Device::FullAddressSettings full = Device::FullAddressSettings::make<Device::FullAddressSettings::as_parent>( settings, Device::address(*parentnode)); // Add in the device implementation devModel .list() .device(dev_node.template get<Device::DeviceSettings>().name) .addAddress(full); // Add in the device explorer addLocalAddress(*parentnode, settings, row); }
void NodeUpdateProxy::removeNode( const Device::NodePath& parentPath, const Device::AddressSettings& settings) { Device::Node* parentnode = parentPath.toNode(&devModel.rootNode()); if(!parentnode) return; auto addr = Device::address(*parentnode); addr.path.append(settings.name); // Remove from the device implementation const auto& dev_node = devModel.rootNode().childAt(parentPath.at(0)); devModel.list().device( dev_node.template get<Device::DeviceSettings>().name) .removeNode(addr); // Remove from the device explorer auto it = std::find_if( parentnode->begin(), parentnode->end(), [&] (const Device::Node& n) { return n.get<Device::AddressSettings>().name == settings.name; }); ISCORE_ASSERT(it != parentnode->end()); if(deviceExplorer) { deviceExplorer->removeNode(it); } else { parentnode->erase(it); } }
void DeviceExplorerModel::debug_printPath(const Device::NodePath& path) { const int pathSize = path.size(); for(int i = 0; i < pathSize; ++i) { std::cerr << path.at(i) << " "; } std::cerr << "\n"; }
QModelIndex DeviceExplorerModel::convertPathToIndex(const Device::NodePath& path) { QModelIndex iter; const int pathSize = path.size(); for(int i = 0; i < pathSize; ++i) { iter = index(path.at(i), 0, iter); } return iter; }