void DeviceData::showDevice(int idx, QString &deviceName, QString &xmlDesc)
{
    if ( device!=NULL ) closeDataEdit();
    devName->setText(QString("<b>%1</b>").arg(deviceName));
    QDomDocument doc;
    doc.setContent(xmlDesc);
    QString deviceType = doc.firstChildElement("device").
            firstChild().nodeName();
    if ( deviceType == "disk" ) {
        device = new Disk_Edit(
                    this,
                    ptr_ConnPtr);
        connect(device, SIGNAL(errorMsg(QString&)),
                this, SIGNAL(errorMsg(QString&)));
    } else if ( deviceType == "interface" ) {
DeviceData::DeviceData(
        QWidget *parent, virConnectPtr *conn ) :
    QWidget(parent), ptr_ConnPtr(conn)
{
    devName = new QLabel(this);
    save = new QPushButton(QIcon::fromTheme("document-save"), "", this);
    save->setSizePolicy(QSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum));
    save->setToolTip("Save current device state");
    revert = new QPushButton(QIcon::fromTheme("document-revert"), "", this);
    revert->setToolTip("Revert to previous device state");
    revert->setSizePolicy(QSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum));
    restoreMenu = new DeviceRestoreMenu(this);
    restoreMenu->revertData->setEnabled(false);
    revert->setMenu(restoreMenu);
    _close = new QPushButton(QIcon::fromTheme("dialog-close"), "", this);
    _close->setToolTip("Close device editor");
    _close->setSizePolicy(QSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum));
    panelLayout = new QHBoxLayout(this);
    panelLayout->addWidget(devName, 10, Qt::AlignLeft);
    panelLayout->addWidget(save, 1, Qt::AlignRight);
    panelLayout->addWidget(revert, 1, Qt::AlignRight);
    panelLayout->addWidget(_close, 1, Qt::AlignRight);
    panel = new QWidget(this);
    panel->setLayout(panelLayout);
    infoWidget = new QScrollArea(this);
    infoWidget->setWidgetResizable(true);
    scrolled = new QWidget(this);
    infoLayout = new QVBoxLayout(this);
    scrolled->setLayout(infoLayout);
    infoWidget->setWidget(scrolled);
    commonLayout = new QVBoxLayout(this);
    commonLayout->addWidget(panel);
    commonLayout->addWidget(infoWidget);
    setLayout(commonLayout);
    connect(save, SIGNAL(clicked()),
            this, SLOT(saveDeviceData()));
    connect(restoreMenu->revertData, SIGNAL(triggered()),
            this, SLOT(revertDeviceData()));
    connect(restoreMenu->resetData, SIGNAL(triggered()),
            this, SLOT(revertDeviceData()));
    connect(_close, SIGNAL(clicked()),
            this, SLOT(closeDataEdit()));
}
void DeviceData::showDevice(int idx, QString &deviceName, QString &xmlDesc)
{
    if ( device!=nullptr ) closeDataEdit();
    emit dataProcessed(false);
    devName->setText(QString("<b>%1</b>").arg(deviceName));
    QDomDocument doc;
    doc.setContent(xmlDesc);
    QString deviceType;
    QDomElement _el = doc.firstChildElement("device");
    if ( _el.isNull() ) return;
    QDomNode _node = _el.firstChild();
    if ( _node.isNull() ) return;
    deviceType = _node.nodeName();
    devIcon = new QLabel(this);
    devIcon->setPixmap(QIcon::fromTheme(
                           QString("device-%1").arg(deviceType))
                       .pixmap(64));
    if        ( deviceType == "disk" ) {
        device = new Disk_Edit(
                    this,
                    ptr_ConnPtr);
        connect(device, SIGNAL(errorMsg(QString&)),
                this, SIGNAL(errorMsg(QString&)));
    } else if ( deviceType == "interface" ) {