Source Code (Use browser search to find items of interest.)
Class Index
kcontrol'KBackground (./kdebase/kcontrol/kdm/backgnd.h:66)
class KBackground: public KCModule
{
Q_OBJECT
public:
KBackground(QWidget *parent, const char *name);
virtual void load();
virtual void save();
virtual void defaults();
signals:
void changed(bool);
private slots:
void slotSelectDesk(int desk);
void slotCommonDesk(bool common);
void slotBGMode(int mode);
void slotBGSetup();
void slotColor1(const QColor &);
void slotColor2(const QColor &);
void slotImageDropped(QString);
void slotWPMode(int);
void slotWallpaper(const QString &);
void slotBrowseWallpaper();
void slotSetupMulti();
void slotPreviewDone(int);
void slotMultiMode(bool);
private:
void init();
void apply();
int m_Desk, m_Max;
QCheckBox *m_pCBMulti;
QComboBox *m_pBackgroundBox, *m_pWallpaperBox;
QComboBox *m_pArrangementBox;
QPushButton *m_pBGSetupBut, *m_pMSetupBut;
QPushButton *m_pBrowseBut;
QMap<QString,int> m_Wallpaper;
KBackgroundRenderer *m_Renderer[_maxDesktops];
KColorButton *m_pColor1But, *m_pColor2But;
KBGMonitor *m_pMonitor;
KStandardDirs *m_pDirs;
};
kcontrol'KBackground::KBackground() (./kdebase/kcontrol/display/backgnd.cpp:99)
KBackground::KBackground(QWidget *parent, const char *name)
: KCModule(parent, name)
{
m_pConfig = new KConfig("kdesktoprc");
m_pDirs = KGlobal::dirs();
// Top layout
QGridLayout *top = new QGridLayout(this, 3, 2);
top->setSpacing(10); top->setMargin(10);
top->setColStretch(0, 1);
top->setColStretch(1, 2);
// A nice button size. Translators can adapt this
QPushButton *pbut = new QPushButton(i18n("abcdefgh"), this);
QSize bsize = pbut->sizeHint();
delete pbut;
// Desktop chooser at (0, 0)
QGroupBox *group = new QGroupBox(i18n("Desktop"), this);
top->addWidget(group, 0, 0);
QVBoxLayout *vbox = new QVBoxLayout(group);
vbox->setMargin(10);
vbox->setSpacing(10);
vbox->addSpacing(10);
m_pDeskList = new QListBox(group);
connect(m_pDeskList, SIGNAL(highlighted(int)), SLOT(slotSelectDesk(int)));
vbox->addWidget(m_pDeskList);
m_pCBCommon = new QCheckBox(i18n("&Common Background"), group);
vbox->addWidget(m_pCBCommon);
connect(m_pCBCommon, SIGNAL(toggled(bool)), SLOT(slotCommonDesk(bool)));
// Background settings
group = new QGroupBox(i18n("Background"), this);
top->addWidget(group, 1, 0);
QGridLayout *grid = new QGridLayout(group, 5, 2);
grid->setMargin(10);
grid->setSpacing(10);
grid->addRowSpacing(0, 10);
grid->setColStretch(0, 0);
QLabel *lbl = new QLabel(i18n("&Mode:"), group);
lbl->setFixedSize(lbl->sizeHint());
grid->addWidget(lbl, 1, 0, Qt::AlignLeft);
m_pBackgroundBox = new QComboBox(group);
connect(m_pBackgroundBox, SIGNAL(activated(int)), SLOT(slotBGMode(int)));
lbl->setBuddy(m_pBackgroundBox);
grid->addWidget(m_pBackgroundBox, 1, 1);
lbl = new QLabel(i18n("Color &1:"), group);
lbl->setFixedSize(lbl->sizeHint());
grid->addWidget(lbl, 2, 0, Qt::AlignLeft);
m_pColor1But = new KColorButton(group);
connect(m_pColor1But, SIGNAL(changed(const QColor &)),
SLOT(slotColor1(const QColor &)));
grid->addWidget(m_pColor1But, 2, 1);
lbl->setBuddy(m_pColor1But);
lbl = new QLabel(i18n("Color &2:"), group);
lbl->setFixedSize(lbl->sizeHint());
grid->addWidget(lbl, 3, 0, Qt::AlignLeft);
m_pColor2But = new KColorButton(group);
connect(m_pColor2But, SIGNAL(changed(const QColor &)),
SLOT(slotColor2(const QColor &)));
grid->addWidget(m_pColor2But, 3, 1);
lbl->setBuddy(m_pColor2But);
QHBoxLayout *hbox = new QHBoxLayout();
grid->addLayout(hbox, 4, 1);
m_pBGSetupBut = new QPushButton(i18n("&Setup"), group);
m_pBGSetupBut->setFixedSize(bsize);
connect(m_pBGSetupBut, SIGNAL(clicked()), SLOT(slotBGSetup()));
hbox->addWidget(m_pBGSetupBut);
hbox->addStretch();
// Preview monitor at (0,1)
hbox = new QHBoxLayout();
top->addLayout(hbox, 0, 1);
lbl = new QLabel(this);
lbl->setPixmap(locate("data", "kcontrol/pics/monitor.png"));
lbl->setFixedSize(lbl->sizeHint());
hbox->addWidget(lbl);
m_pMonitor = new KBGMonitor(lbl, "preview monitor");
m_pMonitor->setGeometry(20, 10, 157, 111);
connect(m_pMonitor, SIGNAL(imageDropped(QString)), SLOT(slotImageDropped(QString)));
// Wallpaper at (1,1)
group = new QGroupBox(i18n("Wallpaper"), this);
top->addWidget(group, 1, 1);
grid = new QGridLayout(group, 6, 2);
grid->setMargin(10); grid->setSpacing(10);
grid->addRowSpacing(0, 10);
grid->addRowSpacing(4, 10);
lbl = new QLabel(i18n("M&ode:"), group);
lbl->setFixedSize(lbl->sizeHint());
grid->addWidget(lbl, 1, 0, Qt::AlignLeft);
m_pArrangementBox = new QComboBox(group);
connect(m_pArrangementBox, SIGNAL(activated(int)), SLOT(slotWPMode(int)));
lbl->setBuddy(m_pArrangementBox);
grid->addWidget(m_pArrangementBox, 1, 1);
lbl = new QLabel(i18n("&Wallpaper"), group);
lbl->setFixedSize(lbl->sizeHint());
grid->addWidget(lbl, 2, 0, Qt::AlignLeft);
m_pWallpaperBox = new QComboBox(group);
lbl->setBuddy(m_pWallpaperBox);
connect(m_pWallpaperBox, SIGNAL(activated(const QString &)),
SLOT(slotWallpaper(const QString &)));
grid->addWidget(m_pWallpaperBox, 2, 1);
hbox = new QHBoxLayout();
grid->addLayout(hbox, 3, 1);
m_pBrowseBut = new QPushButton(i18n("&Browse"), group);
m_pBrowseBut->setFixedSize(bsize);
connect(m_pBrowseBut, SIGNAL(clicked()), SLOT(slotBrowseWallpaper()));
hbox->addWidget(m_pBrowseBut);
hbox->addStretch();
m_pCBMulti = new QCheckBox(i18n("M&ultiple:"), group);
m_pCBMulti->setFixedSize(m_pCBMulti->sizeHint());
connect(m_pCBMulti, SIGNAL(toggled(bool)), SLOT(slotMultiMode(bool)));
grid->addWidget(m_pCBMulti, 4, 0);
hbox = new QHBoxLayout();
grid->addLayout(hbox, 4, 1);
m_pMSetupBut = new QPushButton(i18n("S&etup"), group);
m_pMSetupBut->setFixedSize(bsize);
connect(m_pMSetupBut, SIGNAL(clicked()), SLOT(slotSetupMulti()));
hbox->addWidget(m_pMSetupBut);
hbox->addStretch();
// Blending
group = new QGroupBox(i18n("Blending between Background and Wallpaper"),
this);
top->addMultiCellWidget(group, 2,2, 0, 1);
grid = new QGridLayout(group, 2, 5);
grid->setMargin(10);
grid->setSpacing(10);
grid->addRowSpacing(0, 10);
lbl = new QLabel(i18n("&Mode:"), group);
lbl->setFixedSize(lbl->sizeHint());
grid->addWidget(lbl,1,0);
m_pBlendBox = new QComboBox(group);
connect(m_pBlendBox, SIGNAL(activated(int)), SLOT(slotBlendMode(int)));
lbl->setBuddy(m_pBlendBox);
grid->addWidget(m_pBlendBox,1,1);
lbl = new QLabel(i18n("&Balance:"), group);
lbl->setFixedSize(lbl->sizeHint());
grid->addWidget(lbl,1,2);
m_pBlendSlider = new QSlider( QSlider::Horizontal, group );
m_pBlendSlider->setRange( -200, 200 );
connect(m_pBlendSlider, SIGNAL(valueChanged(int)),
SLOT(slotBlendBalance(int)));
lbl->setBuddy(m_pBlendSlider);
grid->addWidget(m_pBlendSlider,1,3);
m_pReverseBlending = new QCheckBox(i18n("&Reverse"), group);
m_pReverseBlending->setFixedSize(m_pReverseBlending->sizeHint());
connect(m_pReverseBlending, SIGNAL(toggled(bool)),
SLOT(slotReverseBlending(bool)));
grid->addWidget(m_pReverseBlending,1,4);
m_Desk = KWin::currentDesktop() - 1;
m_Max = KWin::numberOfDesktops();
m_pGlobals = new KGlobalBackgroundSettings();
for (int i=0; i<m_Max; i++) {
m_Renderer[i] = new KBackgroundRenderer(i);
connect(m_Renderer[i], SIGNAL(imageDone(int)), SLOT(slotPreviewDone(int)));
}
// Doing this only in KBGMonitor only doesn't work, probably due to the
// reparenting that is done.
setAcceptDrops(true);
init();
apply();
}
/*
* Fill all check/listboxen
*/
kcontrol'KBackground::init() (./kdebase/kcontrol/display/backgnd.cpp:285)
void KBackground::init()
{
int i;
// Desktop names
for (i=0; i<KWin::numberOfDesktops(); i++)
m_pDeskList->insertItem(m_pGlobals->deskName(i));
// Background modes: make sure these match with kdesktop/bgrender.cc !!
m_pBackgroundBox->insertItem(i18n("Flat"));
m_pBackgroundBox->insertItem(i18n("Pattern"));
m_pBackgroundBox->insertItem(i18n("Background Program"));
m_pBackgroundBox->insertItem(i18n("Horizontal Gradient"));
m_pBackgroundBox->insertItem(i18n("Vertical Gradient"));
m_pBackgroundBox->insertItem(i18n("Pyramid Gradient"));
m_pBackgroundBox->insertItem(i18n("Pipecross Gradient"));
m_pBackgroundBox->insertItem(i18n("Elliptic Gradient"));
// Blend modes: make sure these match with kdesktop/bgrender.cc !!
m_pBlendBox->insertItem(i18n("No Blending"));
m_pBlendBox->insertItem(i18n("Horizontal Blending"));
m_pBlendBox->insertItem(i18n("Vertical Blending"));
m_pBlendBox->insertItem(i18n("Pyramid Blending"));
m_pBlendBox->insertItem(i18n("Pipecross Blending"));
m_pBlendBox->insertItem(i18n("Elliptic Blending"));
m_pBlendBox->insertItem(i18n("Intensity Blending"));
m_pBlendBox->insertItem(i18n("Saturate Blending"));
m_pBlendBox->insertItem(i18n("Contrast Blending"));
m_pBlendBox->insertItem(i18n("Hue Shift Blending"));
// Use this as a common size for the combo boxen
int width = m_pBackgroundBox->sizeHint().width();
// Wallpapers
QStringList lst = m_pDirs->findAllResources("wallpaper", "*", false, true);
for (i=0; i<(int)lst.count(); i++) {
int n = lst[i].findRev('/');
QString s = lst[i].mid(n+1);
m_pWallpaperBox->insertItem(s);
m_Wallpaper[s] = i;
}
// I would have prefered to use setMinimumWidth here, but it seems to
// have no effect. The default width is too large because of the long
// filenames that are inserted.
m_pWallpaperBox->setFixedWidth(width);
// Wallpaper tilings: again they must match the ones from bgrender.cc
m_pArrangementBox->insertItem(i18n("No Wallpaper"));
m_pArrangementBox->insertItem(i18n("Centred"));
m_pArrangementBox->insertItem(i18n("Tiled"));
m_pArrangementBox->insertItem(i18n("Center Tiled"));
m_pArrangementBox->insertItem(i18n("Centred Maxpect"));
m_pArrangementBox->insertItem(i18n("Scaled"));
m_pArrangementBox->setFixedWidth(width);
}
kcontrol'KBackground::apply() (./kdebase/kcontrol/display/backgnd.cpp:343)
void KBackground::apply()
{
int desk = m_Desk;
if (m_pGlobals->commonBackground())
desk = 0;
KBackgroundRenderer *r = m_Renderer[desk];
// Desktop names
if (m_pGlobals->commonBackground()) {
m_pCBCommon->setChecked(true);
m_pDeskList->setEnabled(false);
} else {
m_pCBCommon->setChecked(false);
m_pDeskList->setEnabled(true);
m_pDeskList->setCurrentItem(m_Desk);
}
// Background mode
m_pBackgroundBox->setCurrentItem(r->backgroundMode());
m_pColor1But->setColor(r->colorA());
m_pColor2But->setColor(r->colorB());
switch (r->backgroundMode()) {
case KBackgroundSettings::Program:
m_pColor1But->setEnabled(false);
m_pColor2But->setEnabled(false);
m_pBGSetupBut->setEnabled(true);
break;
case KBackgroundSettings::Flat:
m_pColor1But->setEnabled(true);
m_pColor2But->setEnabled(false);
m_pBGSetupBut->setEnabled(false);
break;
case KBackgroundSettings::Pattern:
m_pColor1But->setEnabled(true);
m_pColor2But->setEnabled(true);
m_pBGSetupBut->setEnabled(true);
break;
default:
m_pColor1But->setEnabled(true);
m_pColor2But->setEnabled(true);
m_pBGSetupBut->setEnabled(false);
break;
}
// Wallpaper mode
QString wp = r->wallpaper();
if (wp.isEmpty())
wp = QString(" ");
if (!m_Wallpaper.contains(wp)) {
int count = m_Wallpaper.count();
m_Wallpaper[wp] = count;
m_pWallpaperBox->insertItem(wp);
m_pWallpaperBox->setCurrentItem(count);
}
m_pWallpaperBox->setCurrentItem(m_Wallpaper[wp]);
m_pArrangementBox->setCurrentItem(r->wallpaperMode());
if (r->wallpaperMode() == KBackgroundSettings::NoWallpaper) {
m_pCBMulti->setEnabled(false);
m_pWallpaperBox->setEnabled(false);
m_pBrowseBut->setEnabled(false);
m_pMSetupBut->setEnabled(false);
// Blending not possible without wallpaper
m_pBlendBox->setEnabled(false);
m_pBlendSlider->setEnabled(false);
m_pReverseBlending->setEnabled(false);
}
else {
m_pCBMulti->setEnabled(true);
m_pBlendBox->setEnabled(true);
m_pBlendSlider->setEnabled(
(r->blendMode()==KBackgroundSettings::NoBlending)?false:true);
m_pReverseBlending->setEnabled(
(r->blendMode()<KBackgroundSettings::IntensityBlending)?false:true);
// Multi mode
if (r->multiWallpaperMode() == KBackgroundSettings::NoMulti) {
m_pCBMulti->setChecked(false);
m_pWallpaperBox->setEnabled(true);
m_pBrowseBut->setEnabled(true);
m_pMSetupBut->setEnabled(false);
} else {
m_pCBMulti->setChecked(true);
m_pWallpaperBox->setEnabled(false);
m_pBrowseBut->setEnabled(false);
m_pMSetupBut->setEnabled(true);
}
}
m_pBlendBox->setCurrentItem(r->blendMode());
m_pBlendSlider->setValue(r->blendBalance());
m_pReverseBlending->setChecked(r->reverseBlending());
// Start preview render
r->setPreview(m_pMonitor->size());
r->start();
}
kcontrol'KBackground::load() (./kdebase/kcontrol/display/backgnd.cpp:442)
void KBackground::load()
{
int desk = m_Desk;
if (m_pGlobals->commonBackground())
desk = 0;
m_Renderer[desk]->load(desk);
apply();
emit changed(false);
}
kcontrol'KBackground::save() (./kdebase/kcontrol/display/backgnd.cpp:454)
void KBackground::save()
{
qDebug("Saving stuff...");
m_pGlobals->writeSettings();
for (int i=0; i<m_Max; i++)
m_Renderer[i]->writeSettings();
// reconfigure kdesktop. kdesktop will notify all clients
DCOPClient *client = kapp->dcopClient();
client->send("kdesktop", "KBackgroundIface", "configure()", "");
emit changed(false);
}
kcontrol'KBackground::defaults() (./kdebase/kcontrol/display/backgnd.cpp:469)
void KBackground::defaults()
{
int desk = m_Desk;
if (m_pGlobals->commonBackground())
desk = 0;
KBackgroundRenderer *r = m_Renderer[desk];
if (r->isActive())
r->stop();
r->setBackgroundMode(KBackgroundSettings::Flat);
r->setColorA(_defColorA);
r->setColorB(_defColorB);
r->setWallpaperMode(KBackgroundSettings::NoWallpaper);
r->setMultiWallpaperMode(KBackgroundSettings::NoMulti);
r->setBlendMode(KBackgroundSettings::NoBlending);
r->setBlendBalance(_defBlendBalance);
r->setReverseBlending(_defReverseBlending);
m_pGlobals->setCommonBackground(_defCommon);
apply();
emit changed(true);
}
kcontrol'KBackground::slotSelectDesk() (./kdebase/kcontrol/display/backgnd.cpp:492)
void KBackground::slotSelectDesk(int desk)
{
if (desk == m_Desk)
return;
if (m_Renderer[m_Desk]->isActive())
m_Renderer[m_Desk]->stop();
m_Desk = desk;
apply();
}
kcontrol'KBackground::slotCommonDesk() (./kdebase/kcontrol/display/backgnd.cpp:504)
void KBackground::slotCommonDesk(bool common)
{
if (common == m_pGlobals->commonBackground())
return;
m_pGlobals->setCommonBackground(common);
apply();
emit changed(true);
}
/*
* Called from the "Background Mode" combobox.
*/
kcontrol'KBackground::slotBGMode() (./kdebase/kcontrol/display/backgnd.cpp:518)
void KBackground::slotBGMode(int mode)
{
int desk = m_Desk;
if (m_pGlobals->commonBackground())
desk = 0;
KBackgroundRenderer *r = m_Renderer[desk];
if (mode == r->backgroundMode())
return;
r->stop();
r->setBackgroundMode(mode);
apply();
emit changed(true);
}
/*
* Called from the "Blending Mode" combobox.
*/
kcontrol'KBackground::slotBlendMode() (./kdebase/kcontrol/display/backgnd.cpp:537)
void KBackground::slotBlendMode(int mode)
{
int desk = m_Desk;
if (m_pGlobals->commonBackground())
desk = 0;
KBackgroundRenderer *r = m_Renderer[desk];
if (mode == r->blendMode())
return;
m_pBlendSlider->setEnabled( (mode==KBackgroundSettings::NoBlending)
?false:true);
m_pReverseBlending->setEnabled(
(r->blendMode()<KBackgroundSettings::IntensityBlending)?false:true);
r->stop();
r->setBlendMode(mode);
apply();
emit changed(true);
}
/*
* Called from the "Blending" Slider
*/
kcontrol'KBackground::slotBlendBalance() (./kdebase/kcontrol/display/backgnd.cpp:561)
void KBackground::slotBlendBalance(int value)
{
int desk = m_Desk;
if (m_pGlobals->commonBackground())
desk = 0;
KBackgroundRenderer *r = m_Renderer[desk];
if (value == r->blendBalance())
return;
r->stop();
r->setBlendBalance(value);
apply();
emit changed(true);
}
/*
* Called from the "Reverse Blending" Checkbox
*/
kcontrol'KBackground::slotReverseBlending() (./kdebase/kcontrol/display/backgnd.cpp:580)
void KBackground::slotReverseBlending(bool value)
{
int desk = m_Desk;
if (m_pGlobals->commonBackground())
desk = 0;
KBackgroundRenderer *r = m_Renderer[desk];
if (value == r->reverseBlending())
return;
r->stop();
r->setReverseBlending(value);
apply();
emit changed(true);
}
/*
* Called from the "Background Setup" pushbutton.
*/
kcontrol'KBackground::slotBGSetup() (./kdebase/kcontrol/display/backgnd.cpp:600)
void KBackground::slotBGSetup()
{
int desk = m_Desk;
if (m_pGlobals->commonBackground())
desk = 0;
KBackgroundRenderer *r = m_Renderer[desk];
switch (r->backgroundMode()) {
case KBackgroundSettings::Pattern:
{
KPatternSelectDialog dlg;
QString cur = r->KBackgroundPattern::name();
dlg.setCurrent(cur);
if ((dlg.exec() == QDialog::Accepted) && !dlg.pattern().isEmpty()) {
r->stop();
r->setPattern(dlg.pattern());
r->start();
emit changed(true);
}
break;
}
case KBackgroundSettings::Program:
{
KProgramSelectDialog dlg;
QString cur = r->KBackgroundProgram::name();
dlg.setCurrent(cur);
if ((dlg.exec() == QDialog::Accepted) && !dlg.program().isEmpty()) {
r->stop();
r->setProgram(dlg.program());
r->start();
emit changed(true);
}
break;
}
default:
break;
}
}
kcontrol'KBackground::slotColor1() (./kdebase/kcontrol/display/backgnd.cpp:640)
void KBackground::slotColor1(const QColor &color)
{
int desk = m_Desk;
if (m_pGlobals->commonBackground())
desk = 0;
KBackgroundRenderer *r = m_Renderer[desk];
if (color == r->colorA())
return;
r->stop();
r->setColorA(color);
r->start();
emit changed(true);
}
kcontrol'KBackground::slotColor2() (./kdebase/kcontrol/display/backgnd.cpp:657)
void KBackground::slotColor2(const QColor &color)
{
int desk = m_Desk;
if (m_pGlobals->commonBackground())
desk = 0;
KBackgroundRenderer *r = m_Renderer[desk];
if (color == r->colorB())
return;
r->stop();
r->setColorB(color);
r->start();
emit changed(true);
}
kcontrol'KBackground::slotImageDropped() (./kdebase/kcontrol/display/backgnd.cpp:674)
void KBackground::slotImageDropped(QString uri)
{
int desk = m_Desk;
if (m_pGlobals->commonBackground())
desk = 0;
KBackgroundRenderer *r = m_Renderer[desk];
if (uri == r->wallpaper())
return;
if (!m_Wallpaper.contains(uri)) {
int count = m_Wallpaper.count();
m_Wallpaper[uri] = count;
m_pWallpaperBox->insertItem(uri);
m_pWallpaperBox->setCurrentItem(count);
}
r->stop();
r->setWallpaper(uri);
r->start();
emit changed(true);
}
kcontrol'KBackground::slotMultiMode() (./kdebase/kcontrol/display/backgnd.cpp:697)
void KBackground::slotMultiMode(bool multi)
{
int desk = m_Desk;
if (m_pGlobals->commonBackground())
desk = 0;
KBackgroundRenderer *r = m_Renderer[desk];
if (multi == (r->multiWallpaperMode() != KBackgroundSettings::NoMulti))
return;
r->stop();
r->setMultiWallpaperMode(multi ? 1 : 0);
r->start();
if (multi) {
m_pWallpaperBox->setEnabled(false);
m_pBrowseBut->setEnabled(false);
m_pMSetupBut->setEnabled(true);
} else {
m_pWallpaperBox->setEnabled(true);
m_pBrowseBut->setEnabled(true);
m_pMSetupBut->setEnabled(false);
}
emit changed(true);
}
kcontrol'KBackground::slotWallpaper() (./kdebase/kcontrol/display/backgnd.cpp:723)
void KBackground::slotWallpaper(const QString &wallpaper)
{
int desk = m_Desk;
if (m_pGlobals->commonBackground())
desk = 0;
KBackgroundRenderer *r = m_Renderer[desk];
if (wallpaper == r->wallpaper())
return;
r->stop();
r->setWallpaper(wallpaper);
r->start();
emit changed(true);
}
kcontrol'KBackground::slotBrowseWallpaper() (./kdebase/kcontrol/display/backgnd.cpp:740)
void KBackground::slotBrowseWallpaper()
{
int desk = m_Desk;
if (m_pGlobals->commonBackground())
desk = 0;
KBackgroundRenderer *r = m_Renderer[desk];
KURL url = KFileDialog::getOpenURL();
if (url.isEmpty())
return;
if (!url.isLocalFile()) {
KMessageBox::sorry(this, i18n("Currently are only local wallpapers allowed."));
return;
}
QString file = url.path();
if (file == r->wallpaper())
return;
if (!m_Wallpaper.contains(file)) {
int count = m_Wallpaper.count();
m_Wallpaper[file] = count;
m_pWallpaperBox->insertItem(file);
m_pWallpaperBox->setCurrentItem(count);
}
r->stop();
r->setWallpaper(file);
r->start();
emit changed(true);
}
/*
* Called from the "Wallpaper Arrangement" combobox.
*/
kcontrol'KBackground::slotWPMode() (./kdebase/kcontrol/display/backgnd.cpp:775)
void KBackground::slotWPMode(int mode)
{
int desk = m_Desk;
if (m_pGlobals->commonBackground())
desk = 0;
KBackgroundRenderer *r = m_Renderer[desk];
if (mode == r->wallpaperMode())
return;
if (mode == KBackgroundSettings::NoWallpaper) {
m_pCBMulti->setEnabled(false);
m_pWallpaperBox->setEnabled(false);
m_pBrowseBut->setEnabled(false);
m_pMSetupBut->setEnabled(false);
// Blending not possible without wallpaper
m_pBlendBox->setEnabled(false);
m_pBlendSlider->setEnabled(false);
}
else {
m_pCBMulti->setEnabled(true);
m_pBlendBox->setEnabled(true);
m_pBlendSlider->setEnabled(
(r->blendMode()==KBackgroundSettings::NoBlending)?false:true);
// Multi mode
if (r->multiWallpaperMode() == KBackgroundSettings::NoMulti) {
m_pCBMulti->setChecked(false);
m_pWallpaperBox->setEnabled(true);
m_pBrowseBut->setEnabled(true);
m_pMSetupBut->setEnabled(false);
} else {
m_pCBMulti->setChecked(true);
m_pWallpaperBox->setEnabled(false);
m_pBrowseBut->setEnabled(false);
m_pMSetupBut->setEnabled(true);
}
}
r->stop();
r->setWallpaperMode(mode);
r->start();
emit changed(true);
}
kcontrol'KBackground::slotSetupMulti() (./kdebase/kcontrol/display/backgnd.cpp:822)
void KBackground::slotSetupMulti()
{
int desk = m_Desk;
if (m_pGlobals->commonBackground())
desk = 0;
KBackgroundRenderer *r = m_Renderer[desk];
KMultiWallpaperDialog dlg(r);
if (dlg.exec() == QDialog::Accepted) {
r->stop();
r->start();
emit changed(true);
}
}
kcontrol'KBackground::slotPreviewDone() (./kdebase/kcontrol/display/backgnd.cpp:838)
void KBackground::slotPreviewDone(int desk_done)
{
qDebug("Preview for desktop %d done", desk_done);
int desk = m_Desk;
if (m_pGlobals->commonBackground())
desk = 0;
if (desk != desk_done)
return;
KBackgroundRenderer *r = m_Renderer[desk];
KPixmap pm;
if (QPixmap::defaultDepth() < 15)
pm.convertFromImage(*r->image(), KPixmap::LowColor);
else
pm.convertFromImage(*r->image());
m_pMonitor->setBackgroundPixmap(pm);
}
kcontrol'KBackground::KBackground() (./kdebase/kcontrol/kdm/backgnd.cpp:89)
KBackground::KBackground(QWidget *parent, const char *name)
: KCModule(parent, name)
{
m_pDirs = KGlobal::dirs();
// Top layout
QGridLayout *top = new QGridLayout(this, 2, 2);
top->setSpacing(10); top->setMargin(10);
top->setColStretch(0, 1);
top->setColStretch(1, 2);
// A nice button size. Translators can adapt this
QPushButton *pbut = new QPushButton(i18n("abcdefgh"), this);
QSize bsize = pbut->sizeHint();
delete pbut;
/*
// Desktop chooser at (0, 0)
QGroupBox *group = new QGroupBox(i18n("Desktop"), this);
top->addWidget(group, 0, 0);
QVBoxLayout *vbox = new QVBoxLayout(group);
vbox->setMargin(10);
vbox->setSpacing(10);
vbox->addSpacing(10);
m_pDeskList = new QListBox(group);
connect(m_pDeskList, SIGNAL(highlighted(int)), SLOT(slotSelectDesk(int)));
vbox->addWidget(m_pDeskList);
m_pCBCommon = new QCheckBox(i18n("&Common Background"), group);
vbox->addWidget(m_pCBCommon);
connect(m_pCBCommon, SIGNAL(toggled(bool)), SLOT(slotCommonDesk(bool)));
*/
// Background settings
QGroupBox *group = new QGroupBox(i18n("Background"), this);
top->addWidget(group, 1, 0);
QGridLayout *grid = new QGridLayout(group, 5, 2);
grid->setMargin(10);
grid->setSpacing(10);
grid->addRowSpacing(0, 10);
grid->setColStretch(0, 0);
QLabel *lbl = new QLabel(i18n("&Mode:"), group);
lbl->setFixedSize(lbl->sizeHint());
grid->addWidget(lbl, 1, 0, Qt::AlignLeft);
m_pBackgroundBox = new QComboBox(group);
connect(m_pBackgroundBox, SIGNAL(activated(int)), SLOT(slotBGMode(int)));
lbl->setBuddy(m_pBackgroundBox);
grid->addWidget(m_pBackgroundBox, 1, 1);
lbl = new QLabel(i18n("Color &1:"), group);
lbl->setFixedSize(lbl->sizeHint());
grid->addWidget(lbl, 2, 0, Qt::AlignLeft);
m_pColor1But = new KColorButton(group);
connect(m_pColor1But, SIGNAL(changed(const QColor &)),
SLOT(slotColor1(const QColor &)));
grid->addWidget(m_pColor1But, 2, 1);
lbl->setBuddy(m_pColor1But);
lbl = new QLabel(i18n("Color &2:"), group);
lbl->setFixedSize(lbl->sizeHint());
grid->addWidget(lbl, 3, 0, Qt::AlignLeft);
m_pColor2But = new KColorButton(group);
connect(m_pColor2But, SIGNAL(changed(const QColor &)),
SLOT(slotColor2(const QColor &)));
grid->addWidget(m_pColor2But, 3, 1);
lbl->setBuddy(m_pColor2But);
QHBoxLayout *hbox = new QHBoxLayout();
grid->addLayout(hbox, 4, 1);
m_pBGSetupBut = new QPushButton(i18n("&Setup"), group);
m_pBGSetupBut->setFixedSize(bsize);
connect(m_pBGSetupBut, SIGNAL(clicked()), SLOT(slotBGSetup()));
hbox->addWidget(m_pBGSetupBut);
hbox->addStretch();
// Preview monitor at (0,1)
lbl = new QLabel(this);
lbl->setPixmap(locate("data", "kcontrol/pics/monitor.png"));
lbl->setFixedSize(lbl->sizeHint());
top->addMultiCellWidget(lbl, 0,0,0,1, AlignCenter);
m_pMonitor = new KBGMonitor(lbl);
m_pMonitor->setGeometry(20, 10, 157, 111);
connect(m_pMonitor, SIGNAL(imageDropped(QString)), SLOT(slotImageDropped(QString)));
// Wallpaper at (1,1)
group = new QGroupBox(i18n("Wallpaper"), this);
top->addWidget(group, 1, 1);
grid = new QGridLayout(group, 6, 2);
grid->setMargin(10); grid->setSpacing(10);
grid->addRowSpacing(0, 10);
grid->addRowSpacing(4, 10);
lbl = new QLabel(i18n("M&ode:"), group);
lbl->setFixedSize(lbl->sizeHint());
grid->addWidget(lbl, 1, 0, Qt::AlignLeft);
m_pArrangementBox = new QComboBox(group);
connect(m_pArrangementBox, SIGNAL(activated(int)), SLOT(slotWPMode(int)));
lbl->setBuddy(m_pArrangementBox);
grid->addWidget(m_pArrangementBox, 1, 1);
lbl = new QLabel(i18n("&Wallpaper"), group);
lbl->setFixedSize(lbl->sizeHint());
grid->addWidget(lbl, 2, 0, Qt::AlignLeft);
m_pWallpaperBox = new QComboBox(group);
lbl->setBuddy(m_pWallpaperBox);
connect(m_pWallpaperBox, SIGNAL(activated(const QString &)),
SLOT(slotWallpaper(const QString &)));
grid->addWidget(m_pWallpaperBox, 2, 1);
hbox = new QHBoxLayout();
grid->addLayout(hbox, 3, 1);
m_pBrowseBut = new QPushButton(i18n("&Browse"), group);
m_pBrowseBut->setFixedSize(bsize);
connect(m_pBrowseBut, SIGNAL(clicked()), SLOT(slotBrowseWallpaper()));
hbox->addWidget(m_pBrowseBut);
hbox->addStretch();
m_pCBMulti = new QCheckBox(i18n("M&ultiple:"), group);
m_pCBMulti->setFixedSize(m_pCBMulti->sizeHint());
connect(m_pCBMulti, SIGNAL(toggled(bool)), SLOT(slotMultiMode(bool)));
grid->addWidget(m_pCBMulti, 4, 0);
hbox = new QHBoxLayout();
grid->addLayout(hbox, 4, 1);
m_pMSetupBut = new QPushButton(i18n("S&etup"), group);
m_pMSetupBut->setFixedSize(bsize);
connect(m_pMSetupBut, SIGNAL(clicked()), SLOT(slotSetupMulti()));
hbox->addWidget(m_pMSetupBut);
hbox->addStretch();
m_pCBMulti->hide();
m_pMSetupBut->hide();
m_Desk = 0;
m_Max = 1;
for (int i=0; i<m_Max; i++) {
KSimpleConfig *c = new KSimpleConfig(locate("config", "kdmdesktoprc"));
m_Renderer[i] = new KBackgroundRenderer(i, c);
connect(m_Renderer[i], SIGNAL(imageDone(int)), SLOT(slotPreviewDone(int)));
}
init();
apply();
}
/*
* Fill all check/listboxen
*/
kcontrol'KBackground::init() (./kdebase/kcontrol/kdm/backgnd.cpp:239)
void KBackground::init()
{
int i;
/*
// Desktop names
for (i=0; i<KWin::numberOfDesktops(); i++)
m_pDeskList->insertItem(m_pGlobals->deskName(i));
*/
// Background modes: make sure these match with kdesktop/bgrender.cc !!
m_pBackgroundBox->insertItem(i18n("Flat"));
m_pBackgroundBox->insertItem(i18n("Pattern"));
m_pBackgroundBox->insertItem(i18n("Background Program"));
m_pBackgroundBox->insertItem(i18n("Horizontal Gradient"));
m_pBackgroundBox->insertItem(i18n("Vertical Gradient"));
m_pBackgroundBox->insertItem(i18n("Pyramid Gradient"));
m_pBackgroundBox->insertItem(i18n("Pipecross Gradient"));
m_pBackgroundBox->insertItem(i18n("Elliptic Gradient"));
// Wallpapers
QStringList lst = m_pDirs->findAllResources("wallpaper", "*", false, true);
for (i=0; i<(int)lst.count(); i++) {
int n = lst[i].findRev('/');
QString s = lst[i].mid(n+1);
m_pWallpaperBox->insertItem(s);
m_Wallpaper[s] = i;
}
// Wallpaper tilings: again they must match the ones from bgrender.cc
m_pArrangementBox->insertItem(i18n("No Wallpaper"));
m_pArrangementBox->insertItem(i18n("Centred"));
m_pArrangementBox->insertItem(i18n("Tiled"));
m_pArrangementBox->insertItem(i18n("Center Tiled"));
m_pArrangementBox->insertItem(i18n("Centred Maxpect"));
m_pArrangementBox->insertItem(i18n("Scaled"));
}
kcontrol'KBackground::apply() (./kdebase/kcontrol/kdm/backgnd.cpp:278)
void KBackground::apply()
{
int desk = m_Desk;
desk = 0;
KBackgroundRenderer *r = m_Renderer[desk];
/*
// Desktop names
if (m_pGlobals->commonBackground()) {
m_pCBCommon->setChecked(true);
m_pDeskList->setEnabled(false);
} else {
m_pCBCommon->setChecked(false);
m_pDeskList->setEnabled(true);
m_pDeskList->setCurrentItem(m_Desk);
}
*/
// Background mode
m_pBackgroundBox->setCurrentItem(r->backgroundMode());
m_pColor1But->setColor(r->colorA());
m_pColor2But->setColor(r->colorB());
switch (r->backgroundMode()) {
case KBackgroundSettings::Program:
m_pColor1But->setEnabled(false);
m_pColor2But->setEnabled(false);
m_pBGSetupBut->setEnabled(true);
break;
case KBackgroundSettings::Flat:
m_pColor1But->setEnabled(true);
m_pColor2But->setEnabled(false);
m_pBGSetupBut->setEnabled(false);
break;
case KBackgroundSettings::Pattern:
m_pColor1But->setEnabled(true);
m_pColor2But->setEnabled(true);
m_pBGSetupBut->setEnabled(true);
break;
default:
m_pColor1But->setEnabled(true);
m_pColor2But->setEnabled(true);
m_pBGSetupBut->setEnabled(false);
break;
}
// Wallpaper mode
QString wp = r->wallpaper();
if (wp.isEmpty())
wp = QString(" ");
if (!m_Wallpaper.contains(wp)) {
int count = m_Wallpaper.count();
m_Wallpaper[wp] = count;
m_pWallpaperBox->insertItem(wp);
m_pWallpaperBox->setCurrentItem(count);
}
m_pWallpaperBox->setCurrentItem(m_Wallpaper[wp]);
m_pArrangementBox->setCurrentItem(r->wallpaperMode());
// Multi mode
if (r->multiWallpaperMode() == KBackgroundSettings::NoMulti) {
m_pCBMulti->setChecked(false);
m_pWallpaperBox->setEnabled(true);
m_pBrowseBut->setEnabled(true);
m_pMSetupBut->setEnabled(false);
} else {
m_pCBMulti->setChecked(true);
m_pWallpaperBox->setEnabled(false);
m_pBrowseBut->setEnabled(false);
m_pMSetupBut->setEnabled(true);
}
// Start preview render
r->setPreview(m_pMonitor->size());
r->start();
}
kcontrol'KBackground::load() (./kdebase/kcontrol/kdm/backgnd.cpp:355)
void KBackground::load()
{
int desk = m_Desk;
desk = 0;
m_Renderer[desk]->load(desk);
apply();
emit changed(false);
}
kcontrol'KBackground::save() (./kdebase/kcontrol/kdm/backgnd.cpp:366)
void KBackground::save()
{
qDebug("Saving stuff...");
for (int i=0; i<m_Max; i++)
m_Renderer[i]->writeSettings();
emit changed(false);
}
kcontrol'KBackground::defaults() (./kdebase/kcontrol/kdm/backgnd.cpp:376)
void KBackground::defaults()
{
int desk = m_Desk;
desk = 0;
KBackgroundRenderer *r = m_Renderer[desk];
if (r->isActive())
r->stop();
r->setBackgroundMode(KBackgroundSettings::Flat);
r->setColorA(_defColorA);
r->setColorB(_defColorB);
r->setWallpaperMode(KBackgroundSettings::NoWallpaper);
r->setMultiWallpaperMode(KBackgroundSettings::NoMulti);
apply();
emit changed(true);
}
kcontrol'KBackground::slotSelectDesk() (./kdebase/kcontrol/kdm/backgnd.cpp:394)
void KBackground::slotSelectDesk(int desk)
{
if (desk == m_Desk)
return;
if (m_Renderer[m_Desk]->isActive())
m_Renderer[m_Desk]->stop();
m_Desk = desk;
apply();
}
kcontrol'KBackground::slotCommonDesk() (./kdebase/kcontrol/kdm/backgnd.cpp:406)
void KBackground::slotCommonDesk(bool /*common*/)
{
apply();
emit changed(true);
}
/*
* Called from the "Background Mode" combobox.
*/
kcontrol'KBackground::slotBGMode() (./kdebase/kcontrol/kdm/backgnd.cpp:416)
void KBackground::slotBGMode(int mode)
{
int desk = m_Desk;
desk = 0;
KBackgroundRenderer *r = m_Renderer[desk];
if (mode == r->backgroundMode())
return;
r->stop();
r->setBackgroundMode(mode);
apply();
emit changed(true);
}
/*
* Called from the "Background Setup" pushbutton.
*/
kcontrol'KBackground::slotBGSetup() (./kdebase/kcontrol/kdm/backgnd.cpp:435)
void KBackground::slotBGSetup()
{
int desk = m_Desk;
desk = 0;
KBackgroundRenderer *r = m_Renderer[desk];
switch (r->backgroundMode()) {
case KBackgroundSettings::Pattern:
{
KPatternSelectDialog dlg;
QString cur = r->KBackgroundPattern::name();
dlg.setCurrent(cur);
if ((dlg.exec() == QDialog::Accepted) && !dlg.pattern().isEmpty()) {
r->stop();
r->setPattern(dlg.pattern());
r->start();
emit changed(true);
}
break;
}
case KBackgroundSettings::Program:
{
KProgramSelectDialog dlg;
QString cur = r->KBackgroundProgram::name();
dlg.setCurrent(cur);
if ((dlg.exec() == QDialog::Accepted) && !dlg.program().isEmpty()) {
r->stop();
r->setProgram(dlg.program());
r->start();
emit changed(true);
}
break;
}
default:
break;
}
}
kcontrol'KBackground::slotColor1() (./kdebase/kcontrol/kdm/backgnd.cpp:474)
void KBackground::slotColor1(const QColor &color)
{
int desk = m_Desk;
desk = 0;
KBackgroundRenderer *r = m_Renderer[desk];
if (color == r->colorA())
return;
r->stop();
r->setColorA(color);
r->start();
emit changed(true);
}
kcontrol'KBackground::slotColor2() (./kdebase/kcontrol/kdm/backgnd.cpp:490)
void KBackground::slotColor2(const QColor &color)
{
int desk = m_Desk;
desk = 0;
KBackgroundRenderer *r = m_Renderer[desk];
if (color == r->colorB())
return;
r->stop();
r->setColorB(color);
r->start();
emit changed(true);
}
kcontrol'KBackground::slotImageDropped() (./kdebase/kcontrol/kdm/backgnd.cpp:506)
void KBackground::slotImageDropped(QString uri)
{
int desk = m_Desk;
desk = 0;
KBackgroundRenderer *r = m_Renderer[desk];
if (uri == r->wallpaper())
return;
if (!m_Wallpaper.contains(uri)) {
int count = m_Wallpaper.count();
m_Wallpaper[uri] = count;
m_pWallpaperBox->insertItem(uri);
m_pWallpaperBox->setCurrentItem(count);
}
r->stop();
r->setWallpaper(uri);
r->start();
emit changed(true);
}
kcontrol'KBackground::slotMultiMode() (./kdebase/kcontrol/kdm/backgnd.cpp:528)
void KBackground::slotMultiMode(bool multi)
{
int desk = m_Desk;
desk = 0;
KBackgroundRenderer *r = m_Renderer[desk];
if (multi == (r->multiWallpaperMode() != KBackgroundSettings::NoMulti))
return;
r->stop();
r->setMultiWallpaperMode(multi ? 1 : 0);
r->start();
if (multi) {
m_pWallpaperBox->setEnabled(false);
m_pBrowseBut->setEnabled(false);
m_pMSetupBut->setEnabled(true);
} else {
m_pWallpaperBox->setEnabled(true);
m_pBrowseBut->setEnabled(true);
m_pMSetupBut->setEnabled(false);
}
emit changed(true);
}
kcontrol'KBackground::slotWallpaper() (./kdebase/kcontrol/kdm/backgnd.cpp:553)
void KBackground::slotWallpaper(const QString &wallpaper)
{
int desk = m_Desk;
desk = 0;
KBackgroundRenderer *r = m_Renderer[desk];
if (wallpaper == r->wallpaper())
return;
r->stop();
r->setWallpaper(wallpaper);
r->start();
emit changed(true);
}
kcontrol'KBackground::slotBrowseWallpaper() (./kdebase/kcontrol/kdm/backgnd.cpp:569)
void KBackground::slotBrowseWallpaper()
{
int desk = m_Desk;
desk = 0;
KBackgroundRenderer *r = m_Renderer[desk];
KURL url = KFileDialog::getOpenURL();
if (url.isEmpty())
return;
if (!url.isLocalFile()) {
KMessageBox::sorry(this, i18n("Currently are only local wallpapers allowed."));
return;
}
QString file = url.path();
if (file == r->wallpaper())
return;
if (!m_Wallpaper.contains(file)) {
int count = m_Wallpaper.count();
m_Wallpaper[file] = count;
m_pWallpaperBox->insertItem(file);
m_pWallpaperBox->setCurrentItem(count);
}
r->stop();
r->setWallpaper(file);
r->start();
emit changed(true);
}
/*
* Called from the "Wallpaper Arrangement" combobox.
*/
kcontrol'KBackground::slotWPMode() (./kdebase/kcontrol/kdm/backgnd.cpp:603)
void KBackground::slotWPMode(int mode)
{
int desk = m_Desk;
desk = 0;
KBackgroundRenderer *r = m_Renderer[desk];
if (mode == r->wallpaperMode())
return;
r->stop();
r->setWallpaperMode(mode);
r->start();
emit changed(true);
}
kcontrol'KBackground::slotSetupMulti() (./kdebase/kcontrol/kdm/backgnd.cpp:619)
void KBackground::slotSetupMulti()
{
int desk = m_Desk;
desk = 0;
KBackgroundRenderer *r = m_Renderer[desk];
KMultiWallpaperDialog dlg(r);
if (dlg.exec() == QDialog::Accepted) {
r->stop();
r->start();
emit changed(true);
}
}
kcontrol'KBackground::slotPreviewDone() (./kdebase/kcontrol/kdm/backgnd.cpp:634)
void KBackground::slotPreviewDone(int desk_done)
{
qDebug("Preview for desktop %d done", desk_done);
int desk = m_Desk;
desk = 0;
if (desk != desk_done)
return;
KBackgroundRenderer *r = m_Renderer[desk];
KPixmap pm;
if (QPixmap::defaultDepth() < 15)
pm.convertFromImage(*r->image(), KPixmap::LowColor);
else
pm.convertFromImage(*r->image());
m_pMonitor->setBackgroundPixmap(pm);
}