Exemplo n.º 1
0
void BGDialog::slotWallpaperTypeChanged(int i)
{
    KBackgroundRenderer *r = eRenderer();
    r->stop();

    // No picture
    if (i == m_buttonGroupBackground->id(m_radioNoPicture)) { //None
        m_urlWallpaperBox->setEnabled(false);
        m_urlWallpaperButton->setEnabled(false);
        m_buttonSetupWallpapers->setEnabled(false);
        m_comboWallpaperPos->setEnabled(false);
        m_lblWallpaperPos->setEnabled(false);
        r->setWallpaperMode(KBackgroundSettings::NoWallpaper);

        if (m_slideShowRandom == KBackgroundSettings::InOrder)
            r->setMultiWallpaperMode(KBackgroundSettings::NoMulti);
        else
            r->setMultiWallpaperMode(KBackgroundSettings::NoMultiRandom);

        setBlendingEnabled(false);
    }

    // Slide show
    else if (i == m_buttonGroupBackground->id(m_radioSlideShow)) {
        m_urlWallpaperBox->setEnabled(false);
        m_urlWallpaperButton->setEnabled(false);
        m_buttonSetupWallpapers->setEnabled(true);
        m_comboWallpaperPos->setEnabled(true);
        m_lblWallpaperPos->setEnabled(true);
        setBlendingEnabled(true);

        m_comboWallpaperPos->blockSignals(true);
        m_comboWallpaperPos->setCurrentIndex(m_wallpaperPos - 1);
        m_comboWallpaperPos->blockSignals(false);

        if (r->wallpaperList().count() == 0)
            r->setWallpaperMode(KBackgroundSettings::NoWallpaper);
        else
            r->setWallpaperMode(m_wallpaperPos);

        r->setMultiWallpaperMode(m_slideShowRandom);
        setWallpaper(r->wallpaper());
        setBlendingEnabled(true);
    }

    // 1 Picture
    else if (i == m_buttonGroupBackground->id(m_radioPicture)) {
        m_urlWallpaperBox->setEnabled(true);
        m_urlWallpaperButton->setEnabled(true);
        m_buttonSetupWallpapers->setEnabled(false);
        m_lblWallpaperPos->setEnabled(true);
        m_comboWallpaperPos->setEnabled(true);
        setBlendingEnabled(true);

        if (m_slideShowRandom == KBackgroundSettings::InOrder)
            r->setMultiWallpaperMode(KBackgroundSettings::NoMulti);
        else
            r->setMultiWallpaperMode(KBackgroundSettings::NoMultiRandom);

        int j = m_urlWallpaperBox->currentIndex();
        QString path;
        for (QMap<QString, int>::ConstIterator it = m_wallpaper.constBegin();
                it != m_wallpaper.constEnd();
                ++it) {
            if (it.value() == j) {
                path = it.key();
                break;
            }
        }

        KFileMetaInfo metaInfo(path);
        if (metaInfo.isValid() && metaInfo.item("Dimensions").isValid()) {
            // If the image is greater than 800x600 default to using scaled mode,
            // otherwise default to tiled.

            QSize s = metaInfo.item("Dimensions").value().toSize();
            if (s.width() >= 800 && s.height() >= 600)
                m_wallpaperPos = KBackgroundSettings::Scaled;
            else
                m_wallpaperPos = KBackgroundSettings::Tiled;
        } else if (KMimeType::findByPath(path)->is("image/svg+xml")) {
            m_wallpaperPos = KBackgroundSettings::Scaled;
        }

        r->setWallpaperMode(m_wallpaperPos);
        m_comboWallpaperPos->blockSignals(true);
        m_comboWallpaperPos->setCurrentIndex(m_wallpaperPos - 1);
        m_comboWallpaperPos->blockSignals(false);

        r->setWallpaper(path);
    }

    r->start(true);
    m_copyAllScreens = true;
    emit changed(true);
}