void DTVDeviceConfigGroup::AddNodes( ConfigurationGroup *group, const QString &trigger, DiSEqCDevDevice *node) { if (!node) return; Setting *setting = NULL; switch (node->GetDeviceType()) { case DiSEqCDevDevice::kTypeSwitch: setting = new SwitchSetting(*node, m_settings); setting->setEnabled(m_switches_enabled); break; case DiSEqCDevDevice::kTypeRotor: { DiSEqCDevRotor *rotor = dynamic_cast<DiSEqCDevRotor*>(node); if (rotor && (rotor->GetType() == DiSEqCDevRotor::kTypeDiSEqC_1_2)) setting = new RotorSetting(*node, m_settings); else setting = new USALSRotorSetting(*node, m_settings); break; } default: break; } if (!setting) { AddChild(group, trigger, new TransLabelSetting()); return; } m_devs[node->GetDeviceID()] = setting; uint num_ch = node->GetChildCount(); if (DiSEqCDevDevice::kTypeSwitch == node->GetDeviceType()) { bool useframe = (node != m_tree.Root()); bool zerospace = !useframe; TriggeredConfigurationGroup *cgrp = new TriggeredConfigurationGroup( false, useframe, true, true, false, false, true, zerospace); cgrp->addChild(setting); cgrp->setTrigger(setting); for (uint i = 0; i < num_ch; i++) AddNodes(cgrp, QString::number(i), node->GetChild(i)); AddChild(group, trigger, cgrp); return; } if (!num_ch) { AddChild(group, trigger, setting); return; } VerticalConfigurationGroup *cgrp = new VerticalConfigurationGroup(false, false, true, true); AddChild(cgrp, QString::null, setting); for (uint i = 0; i < num_ch; i++) AddNodes(cgrp, QString::null, node->GetChild(i)); AddChild(group, trigger, cgrp); }