Exemple #1
0
void Popup::onDeviceRemoved(QString const & udi)
{
    MenuDiskItem* item = nullptr;
    const int size = layout()->count() - 1;
    for (int i = size; 0 <= i; --i)
    {
        QWidget *w = layout()->itemAt(i)->widget();
        if (w == mPlaceholder)
            continue;

        MenuDiskItem *it = static_cast<MenuDiskItem *>(w);
        if (udi == it->deviceUdi())
        {
            item = it;
            break;
        }
    }

    if (item != nullptr)
    {
        layout()->removeWidget(item);
        item->deleteLater();

        --mDisplayCount;
        if (mDisplayCount == 0)
            mPlaceholder->show();
    }
}
void MountButton::onDbusDeviceChangesMessage(QDBusObjectPath device)
{
    QString path = device.path();

    QDBusInterface iface("org.freedesktop.UDisks",
                         path,
                         "org.freedesktop.UDisks.Device",
                         QDBusConnection::systemBus());

    //qDebug() << "Device name: " << iface.property("DeviceFile");
    //qDebug() << "Is mounted:  " << iface.property("DeviceIsMounted");

    QString dev_name   = iface.property("DeviceFile").toString();
    bool    is_mounted = iface.property("DeviceIsMounted").toBool();

    StorageItem *item = _sm.getDevice(dev_name);
    if (item == NULL)
    {
        return;
    }

    bool old_state = item->isMounted();
    item->setMountStatus(is_mounted);

    MenuDiskItem *mdi = mPopup.itemByDevice(dev_name);
    if (mdi)
    {
        mdi->setMountStatus(is_mounted);
    }

    if (item->isMounted() != old_state)
    {
        if (item->isMounted())
        {
            switch (mDevAction)
            {
            case DevActionInfo:
                showMessage(tr("The device <b><nobr>\"%1\"</nobr></b> is mounted to %2").arg(dev_name).arg(item->getMountPoint()));
                break;

            case DevActionMenu:
                showMenu();
                break;

            default:
                break;
            }
        }
        else
        {
            if (mDevAction == DevActionInfo)
                showMessage(tr("The device <b><nobr>\"%1\"</nobr></b> is unmounted<br>\nNow you can eject USB Flash or CD/DVD Disk.").arg(dev_name));
        }
    }
}
void Popup::deleteItem(const DiskInfo &info)
{
    MenuDiskItem* item = itemByDevice(info.device_name);
    if (item)
    {
        mCount--;
        layout()->removeWidget(item);
        item->deleteLater();
    }

    if (!mCount)
        hide();
}
Exemple #4
0
void Popup::addItem(Solid::Device device)
{
    MenuDiskItem *item = new MenuDiskItem(device, this);
    connect(item, &MenuDiskItem::invalid, this, &Popup::onDeviceRemoved);
    item->setVisible(true);
    layout()->addWidget(item);

    mDisplayCount++;
    if (mDisplayCount != 0)
        mPlaceholder->hide();

    if (isVisible())
        realign();
}