Source Code (Use browser search to find items of interest.)

Class Index

amor'AmorDialog (./kdetoys/amor/amordialog.h:25)

class AmorDialog : public QDialog
{
    Q_OBJECT
public:
    AmorDialog();
    virtual ~AmorDialog();

signals:
    //-----------------------------------------------------------------------
    //
    // The configuration has changed in some way.
    //
    void changed();

    //-----------------------------------------------------------------------
    //
    // The animation offset has been changed.
    //
    void offsetChanged(int);

protected slots:
    void slotHighlighted(int);
    void slotOnTop(bool);
    void slotRandomTips(bool);
    void slotOffset(int);
    void slotOk();
    void slotCancel();

protected:
    void readThemes();
    void addTheme(QString path, QString file);

protected:
    QListBox *mThemeListBox;
    QMultiLineEdit *mAboutEdit;
    QStrList mThemes;
    QStrList mThemeAbout;
    AmorConfig mConfig;
};

//---------------------------------------------------------------------------
//
// AmorListBoxItem implements a list box items for selection of themes
//

amor'AmorDialog::AmorDialog() (./kdetoys/amor/amordialog.cpp:31)

AmorDialog::AmorDialog()
    : QDialog()
{
    mConfig.read();

    QVBoxLayout *layout = new QVBoxLayout(this, 15);

    QHBoxLayout *hb = new QHBoxLayout();
    layout->addLayout(hb, 1);

    // Theme list
    QVBoxLayout *themeBox = new QVBoxLayout();
    hb->addLayout(themeBox, 1);

    QLabel *label = new QLabel(i18n("Theme:"), this);
    label->setFixedHeight(label->sizeHint().height());
    themeBox->addWidget(label);

    mThemeListBox = new QListBox(this);
    connect(mThemeListBox,SIGNAL(highlighted(int)),SLOT(slotHighlighted(int)));
    mThemeListBox->setMinimumSize(200, 70);
    themeBox->addWidget(mThemeListBox, 2);

    mAboutEdit = new QMultiLineEdit(this);
    mAboutEdit->setReadOnly(true);
    mAboutEdit->setMinimumHeight(40);
    themeBox->addWidget(mAboutEdit, 1);

    // Animation offset
    QVBoxLayout *offsetBox = new QVBoxLayout();
    hb->addLayout(offsetBox);

    label = new QLabel(i18n("Offset:"), this);
    label->setFixedSize(label->sizeHint());
    offsetBox->addWidget(label);

    QSlider *slider = new QSlider(-40, 40, 5, mConfig.mOffset,
                                    QSlider::Vertical, this);
    connect(slider, SIGNAL(valueChanged(int)), SLOT(slotOffset(int)));
    slider->setFixedWidth(slider->sizeHint().width());
    offsetBox->addWidget(slider);

    // Always on top
    QCheckBox *checkBox = new QCheckBox(i18n("Always on top"), this);
    connect(checkBox, SIGNAL(toggled(bool)), SLOT(slotOnTop(bool)));
    checkBox->setFixedHeight(checkBox->sizeHint().height());
    checkBox->setChecked(mConfig.mOnTop);
    layout->addWidget(checkBox);

    checkBox = new QCheckBox(i18n("Show random tips"), this);
    connect(checkBox, SIGNAL(toggled(bool)), SLOT(slotRandomTips(bool)));
    checkBox->setFixedHeight(checkBox->sizeHint().height());
    checkBox->setChecked(mConfig.mTips);
    layout->addWidget(checkBox);

    // OK/Cancel
    hb = new QHBoxLayout();
    layout->addLayout(hb);

    QPushButton *button = new QPushButton(i18n("&OK"), this);
    connect(button, SIGNAL(clicked()), SLOT(slotOk()));
    button->setFixedSize(button->sizeHint());
    hb->addWidget(button);

    hb->addStretch(1);

    button = new QPushButton(i18n("&Cancel"), this);
    connect(button, SIGNAL(clicked()), SLOT(slotCancel()));
    button->setFixedSize(button->sizeHint());
    hb->addWidget(button);

    layout->activate();

    readThemes();

    resize( 400, 300 );
}

//---------------------------------------------------------------------------
//
// Destructor
//

amor'AmorDialog::~AmorDialog() (./kdetoys/amor/amordialog.cpp:113)

AmorDialog::~AmorDialog()
{
}

//---------------------------------------------------------------------------
//
// Get list of all themes
//

amor'AmorDialog::readThemes() (./kdetoys/amor/amordialog.cpp:121)

void AmorDialog::readThemes()
{
#if QT_VERSION >= 199
    QStringList dirs(KGlobal::dirs()->resourceDirs("appdata"));
    for (QStringList::ConstIterator it1 = dirs.end();
         it1 != dirs.begin();)
    {
       it1--;
       QDir dir(*it1, "*rc");
       if (dir.isReadable())
       {
          QStringList list = dir.entryList();
          for (QStringList::ConstIterator it2 = list.begin(); it2 != list.end();
it2++)  
          {
               addTheme(*it1, *it2);
          }
       }
    }	
#else
    // read global themes
    QString path = KApplication::localkdedir().copy();
    path += "/share/apps/amor";

    QDir dir(path, "*rc");
    if (dir.isReadable())
    {
        const QStrList *list = dir.entryList();

        QStrListIterator it( *list );
        for (; it.current(); ++it)
        {
            addTheme(path, it.current());
        }
    }

    // read local themes
    path = KApplication::kde_datadir().copy();
    path += "/amor";

    dir.setPath(path);
    if (dir.isReadable())
    {
        const QStrList *list = dir.entryList();

        QStrListIterator it( *list );
        for (; it.current(); ++it)
        {
            addTheme(path, it.current());
        }
    }
#endif
}

//---------------------------------------------------------------------------
//
// Add a single theme to the list
//

amor'AmorDialog::addTheme() (./kdetoys/amor/amordialog.cpp:179)

void AmorDialog::addTheme(QString path, QString file)
{
    KSimpleConfig config(path + "/" + file, true);

    config.setGroup("Config");

    QString pixmapPath = config.readEntry("PixmapPath");
    if (pixmapPath.isEmpty())
    {
        return;
    }

    if (pixmapPath[0] != '/')
    {
        // relative to config file.
        pixmapPath = path + "/" + pixmapPath;
    }

    QString description = config.readEntry("Description");
    QString about = config.readEntry("About", " ");
    QString pixmapName = config.readEntry("Icon");

    pixmapPath += "/";
    pixmapPath += pixmapName;

    QPixmap pixmap(pixmapPath);

    AmorListBoxItem *item = new AmorListBoxItem(description, pixmap);
    mThemeListBox->insertItem(item);
    mThemes.append(file);
    mThemeAbout.append(about);

    if (mConfig.mTheme == file)
    {
        mThemeListBox->setSelected(mThemeListBox->count()-1, true);
    }
}

//---------------------------------------------------------------------------
//
// User highlighted a theme
//

amor'AmorDialog::slotHighlighted() (./kdetoys/amor/amordialog.cpp:221)

void AmorDialog::slotHighlighted(int index)
{
    mConfig.mTheme = mThemes.at(index);
    mAboutEdit->setText(mThemeAbout.at(index));
}

//---------------------------------------------------------------------------
//
// User changed offset
//

amor'AmorDialog::slotOffset() (./kdetoys/amor/amordialog.cpp:231)

void AmorDialog::slotOffset(int off)
{
    mConfig.mOffset = off;
    emit offsetChanged(mConfig.mOffset);
}

//---------------------------------------------------------------------------
//
// User toggled always on top
//

amor'AmorDialog::slotOnTop() (./kdetoys/amor/amordialog.cpp:241)

void AmorDialog::slotOnTop(bool onTop)
{
    mConfig.mOnTop = onTop;
}

//---------------------------------------------------------------------------
//
// User toggled random tips
//

amor'AmorDialog::slotRandomTips() (./kdetoys/amor/amordialog.cpp:250)

void AmorDialog::slotRandomTips(bool tips)
{
    mConfig.mTips = tips;
}

//---------------------------------------------------------------------------
//
// User clicked Ok
//

amor'AmorDialog::slotOk() (./kdetoys/amor/amordialog.cpp:259)

void AmorDialog::slotOk()
{
    mConfig.write();
    emit changed();
    accept();
}

//---------------------------------------------------------------------------
//
// User clicked Cancel
//

amor'AmorDialog::slotCancel() (./kdetoys/amor/amordialog.cpp:270)

void AmorDialog::slotCancel()
{
    // restore offset
    KConfig *config = kapp->config();
    emit offsetChanged(config->readNumEntry("Offset"));
    reject();
}

//===========================================================================
//
// AmorListBoxItem implements a list box items for selection of themes
//