Source Code (Use browser search to find items of interest.)
Class Index
kcontrol'KDMBackgroundWidget (./kdebase/kcontrol/kdm/kdm-bgnd.h:44)
class KDMBackgroundWidget : public QWidget
{
Q_OBJECT
public:
KDMBackgroundWidget(QWidget *parent, const char *name, bool init = false);
~KDMBackgroundWidget();
enum { NoPic, Tile, Center, Scale, TopLeft, TopRight,
BottomLeft, BottomRight, Fancy, Plain, Vertical, Horizontal };
void loadSettings();
void applySettings();
void setupPage(QWidget*);
protected slots:
void slotSelectColor1( const QColor &col );
void slotSelectColor2( const QColor &col );
void slotBrowse();
void slotWallpaper( const QString& );
void slotWallpaperMode( int );
void slotColorMode( int );
void slotQDrop( QDropEvent* );
void slotQDragLeave( QDragLeaveEvent* );
void slotQDragEnter( QDragEnterEvent* );
protected:
void setMonitor();
void showSettings();
int loadWallpaper( const KURL& url, bool useContext = true);
KIconLoader *iconloader;
KBGMonitor *monitor;
KPixmap wpPixmap;
QString wallpaper;
KColorButton *colButton1, *colButton2;
QButtonGroup *wpGroup, *cGroup;
QComboBox *wpCombo;
QColor color1, color2;
int wpMode, colorMode;
bool gui;
QPushButton *button;
};
kcontrol'KDMBackgroundWidget::~KDMBackgroundWidget() (./kdebase/kcontrol/kdm/kdm-bgnd.cpp:46)
KDMBackgroundWidget::~KDMBackgroundWidget()
{
if(gui)
{
delete cGroup;
delete wpGroup;
}
}
kcontrol'KDMBackgroundWidget::KDMBackgroundWidget() (./kdebase/kcontrol/kdm/kdm-bgnd.cpp:56)
KDMBackgroundWidget::KDMBackgroundWidget(QWidget *parent, const char *name, bool init)
: QWidget(parent, name)
{
gui = !init;
loadSettings();
if(gui)
setupPage(parent);
}
kcontrol'KDMBackgroundWidget::setupPage() (./kdebase/kcontrol/kdm/kdm-bgnd.cpp:65)
void KDMBackgroundWidget::setupPage(QWidget *)
{
QLabel *label;
QGroupBox *tGroup, *lGroup, *rGroup;
QRadioButton *rb;
QGridLayout *topLayout = new QGridLayout(this, 2, 2, 10);
QPixmap p = BarIcon("monitor");
tGroup = new QGroupBox( i18n("Preview"), this );
label = new QLabel( tGroup );
label->setAlignment( AlignCenter );
label->setPixmap( p );
monitor = new KBGMonitor( label );
monitor->setGeometry( 20, 10, 157, 111 );
QBoxLayout *tLayout = new QVBoxLayout(tGroup, 10, 10, "tLayout");
tLayout->addSpacing(tGroup->fontMetrics().height()/2);
tLayout->addWidget(label, 1, AlignCenter);
topLayout->addMultiCellWidget(tGroup, 0, 0, 0, 1);
KDropSite *dropsite = new KDropSite( monitor );
connect( dropsite, SIGNAL( dropAction( QDropEvent*) ),
this, SLOT( slotQDrop( QDropEvent*) ) );
connect( dropsite, SIGNAL( dragLeave( QDragLeaveEvent*) ),
this, SLOT( slotQDragLeave( QDragLeaveEvent*) ) );
connect( dropsite, SIGNAL( dragEnter( QDragEnterEvent*) ),
this, SLOT( slotQDragEnter( QDragEnterEvent*) ) );
lGroup = new QGroupBox( i18n("Color"), this );
cGroup = new QButtonGroup();
cGroup->setFrameStyle(QFrame::NoFrame);
cGroup->setExclusive( TRUE );
QBoxLayout *lLayout = new QVBoxLayout(lGroup, 10, 10);
lLayout->addSpacing(lGroup->fontMetrics().height()/2);
QRadioButton *crb1 = new QRadioButton( i18n("Solid Color"), lGroup );
cGroup->insert( crb1, Plain );
lLayout->addWidget(crb1);
QRadioButton *crb2 = new QRadioButton( i18n("Horizontal Blend"), lGroup );
cGroup->insert( crb2, Horizontal );
lLayout->addWidget(crb2);
QRadioButton *crb3 = new QRadioButton( i18n("Vertical Blend"), lGroup );
cGroup->insert( crb3, Vertical );
lLayout->addWidget(crb3);
connect( cGroup, SIGNAL( clicked( int ) ),
SLOT( slotColorMode( int ) ) );
colButton1 = new KColorButton( color1, lGroup );
colButton1->setFixedSize( colButton1->sizeHint());
connect( colButton1, SIGNAL( changed( const QColor & ) ),
SLOT( slotSelectColor1( const QColor & ) ) );
lLayout->addWidget(colButton1);
colButton2 = new KColorButton( color1, lGroup );
colButton2->setFixedSize( colButton2->sizeHint());
connect( colButton2, SIGNAL( changed( const QColor & ) ),
SLOT( slotSelectColor2( const QColor & ) ) );
lLayout->addWidget(colButton2);
topLayout->addWidget(lGroup, 1, 0);
rGroup = new QGroupBox( i18n("Wallpaper"), this );
QGridLayout *rLayout = new QGridLayout(rGroup, 6, 5, 10);
rLayout->addRowSpacing(0, rGroup->fontMetrics().height()/2);
rLayout->setRowStretch(5, 1);
rLayout->setColStretch(3, 1);
QStringList list = KGlobal::dirs()->findAllResources("wallpaper");
if(!wallpaper.isEmpty())
list.append( wallpaper );
wpCombo = new QComboBox( FALSE, rGroup );
for ( uint i = 0; i < list.count(); i++ )
{
wpCombo->insertItem( *list.at(i) );
if ( wallpaper == *list.at(i) )
wpCombo->setCurrentItem( i );
}
if ( wallpaper.length() > 0 && wpCombo->currentItem() == 0 )
{
wpCombo->insertItem( wallpaper );
wpCombo->setCurrentItem( wpCombo->count()-1 );
}
wpCombo->setMinimumSize(1, 1);
rLayout->addMultiCellWidget(wpCombo, 1, 1, 0, 3);
rLayout->addWidget(wpCombo, 1, 0);
connect( wpCombo, SIGNAL( activated( const QString& ) ),
SLOT( slotWallpaper( const QString& ) ) );
button = new QPushButton( i18n("Browse..."), rGroup );
rLayout->addWidget(button, 1, 4);
connect( button, SIGNAL( clicked() ), SLOT( slotBrowse() ) );
wpGroup = new QButtonGroup();
wpGroup->setFrameStyle(QFrame::NoFrame);
wpGroup->setExclusive( TRUE );
rb = new QRadioButton( i18n("None"), rGroup );
wpGroup->insert( rb, NoPic );
rLayout->addWidget(rb, 2, 0);
rb = new QRadioButton( i18n("Tile"), rGroup );
wpGroup->insert( rb, Tile );
rLayout->addWidget(rb, 3, 0);
rb = new QRadioButton( i18n("Center"), rGroup );
wpGroup->insert( rb, Center );
rLayout->addWidget(rb, 4, 0);
rb = new QRadioButton( i18n("Scale"), rGroup );
wpGroup->insert( rb, Scale );
rLayout->addWidget(rb, 2, 1);
rb = new QRadioButton( i18n("TopLeft"), rGroup );
wpGroup->insert( rb, TopLeft );
rLayout->addWidget(rb, 3, 1);
rb = new QRadioButton( i18n("TopRight"), rGroup );
wpGroup->insert( rb, TopRight );
rLayout->addWidget(rb, 4, 1);
rb = new QRadioButton( i18n("BottomLeft"), rGroup );
wpGroup->insert( rb, BottomLeft );
rLayout->addWidget(rb, 2, 2);
rb = new QRadioButton( i18n("BottomRight"), rGroup );
wpGroup->insert( rb, BottomRight );
rLayout->addWidget(rb, 3, 2);
rb = new QRadioButton( i18n("Fancy"), rGroup );
wpGroup->insert( rb, Fancy );
rLayout->addWidget(rb, 4, 2);
connect( wpGroup, SIGNAL( clicked( int ) ),
SLOT( slotWallpaperMode( int ) ) );
topLayout->addWidget(rGroup, 1, 1);
lLayout->activate();
rLayout->activate();
topLayout->activate();
showSettings();
}
kcontrol'KDMBackgroundWidget::slotQDrop() (./kdebase/kcontrol/kdm/kdm-bgnd.cpp:217)
void KDMBackgroundWidget::slotQDrop( QDropEvent *e )
{
QStrList list;
QString s;
if(QUrlDrag::decode( e, list ) )
{
monitor->setAllowDrop(false);
s = list.first(); // we only want the first
//debug("slotQDropEvent - %s", s.ascii());
s = QUrlDrag::uriToLocalFile(s.ascii()); // a hack. should be improved
if(!s.isEmpty())
loadWallpaper(s);
}
}
kcontrol'KDMBackgroundWidget::slotQDragLeave() (./kdebase/kcontrol/kdm/kdm-bgnd.cpp:233)
void KDMBackgroundWidget::slotQDragLeave( QDragLeaveEvent* )
{
//debug("Got QDragLeaveEvent!");
monitor->setAllowDrop(false);
}
kcontrol'KDMBackgroundWidget::slotQDragEnter() (./kdebase/kcontrol/kdm/kdm-bgnd.cpp:239)
void KDMBackgroundWidget::slotQDragEnter( QDragEnterEvent *e )
{
//debug("Got QDragEnterEvent!");
if( QUrlDrag::canDecode( e ) )
{
monitor->setAllowDrop(true);
e->accept();
}
else
e->ignore();
}
kcontrol'KDMBackgroundWidget::slotSelectColor1() (./kdebase/kcontrol/kdm/kdm-bgnd.cpp:251)
void KDMBackgroundWidget::slotSelectColor1(const QColor &col)
{
color1 = col;
slotWallpaperMode(wpMode);
}
kcontrol'KDMBackgroundWidget::slotSelectColor2() (./kdebase/kcontrol/kdm/kdm-bgnd.cpp:257)
void KDMBackgroundWidget::slotSelectColor2(const QColor &col)
{
color2 = col;
slotWallpaperMode(wpMode);
}
kcontrol'KDMBackgroundWidget::slotBrowse() (./kdebase/kcontrol/kdm/kdm-bgnd.cpp:263)
void KDMBackgroundWidget::slotBrowse()
{
QString filename = KFileDialog::getOpenFileName( 0 );
slotWallpaper( filename );
if ( !filename.isEmpty() && filename != wallpaper)
{
wpCombo->insertItem( wallpaper );
wpCombo->setCurrentItem( wpCombo->count() - 1 );
}
}
kcontrol'KDMBackgroundWidget::setMonitor() (./kdebase/kcontrol/kdm/kdm-bgnd.cpp:274)
void KDMBackgroundWidget::setMonitor()
{
QApplication::setOverrideCursor( waitCursor );
if ( !wallpaper.isEmpty() )
{
//debug("slotSelectColor - setting wallpaper");
float sx = (float)monitor->width() / QApplication::desktop()->width();
float sy = (float)monitor->height() / QApplication::desktop()->height();
QWMatrix matrix;
matrix.scale( sx, sy );
monitor->setBackgroundPixmap( wpPixmap.xForm( matrix ) );
}
QApplication::restoreOverrideCursor();
}
kcontrol'KDMBackgroundWidget::slotWallpaper() (./kdebase/kcontrol/kdm/kdm-bgnd.cpp:292)
void KDMBackgroundWidget::slotWallpaper( const QString& filename )
{
if ( !filename.isEmpty() )
if ( loadWallpaper( filename ) == TRUE )
setMonitor();
}
kcontrol'KDMBackgroundWidget::slotWallpaperMode() (./kdebase/kcontrol/kdm/kdm-bgnd.cpp:299)
void KDMBackgroundWidget::slotWallpaperMode( int m )
{
wpMode = m;
if(wpMode == NoPic)
{
wpCombo->setEnabled(false);
button->setEnabled(false);
}
else
{
wpCombo->setEnabled(true);
button->setEnabled(true);
}
if ( loadWallpaper( wallpaper ) == TRUE )
setMonitor();
}
kcontrol'KDMBackgroundWidget::slotColorMode() (./kdebase/kcontrol/kdm/kdm-bgnd.cpp:318)
void KDMBackgroundWidget::slotColorMode( int m )
{
colorMode = m;
if(colorMode == Plain)
colButton2->setEnabled(false);
else
colButton2->setEnabled(true);
if ( loadWallpaper( wallpaper ) == TRUE )
setMonitor();
}
// Attempts to load the specified wallpaper and creates a centred/scaled
// version if necessary.
// Note that centred pixmaps are placed on a full screen image of background
// color1, so if you want to save memory use a small tiled pixmap.
//
kcontrol'KDMBackgroundWidget::loadWallpaper() (./kdebase/kcontrol/kdm/kdm-bgnd.cpp:336)
int KDMBackgroundWidget::loadWallpaper( const QString& name, bool useContext )
{
static int context = 0;
QString filename;
int rv = FALSE;
KPixmap tmp;
if ( useContext )
{
if ( context )
QColor::destroyAllocContext( context );
context = QColor::enterAllocContext();
}
filename = locate("wallpaper", name);
if ( wpMode == NoPic || tmp.load( filename ) == TRUE )
{
wallpaper = filename;
int w = QApplication::desktop()->width();
int h = QApplication::desktop()->height();
wpPixmap.resize( w, h );
if(wpMode != Scale && wpMode != Tile)
{
switch(colorMode)
{
default:
case Plain:
wpPixmap.fill( color1 );
break;
case Horizontal:
KPixmapEffect::gradient(wpPixmap, color1, color2,
KPixmapEffect::HorizontalGradient);
break;
case Vertical:
KPixmapEffect::gradient(wpPixmap, color1, color2,
KPixmapEffect::VerticalGradient);
break;
} // switch..
} // if..
switch ( wpMode )
{
case Tile:
wpPixmap = tmp;
break;
case Center:
bitBlt( &wpPixmap, (w - tmp.width())/2,
(h - tmp.height())/2, &tmp, 0, 0, tmp.width(), tmp.height() );
break;
case Scale:
{
float sx = (float)w / tmp.width();
float sy = (float)h / tmp.height();
QWMatrix matrix;
matrix.scale( sx, sy );
wpPixmap = tmp.xForm( matrix );
}
break;
case TopLeft:
bitBlt( &wpPixmap, 0, 0, &tmp, 0, 0, tmp.width(), tmp.height() );
break;
case TopRight:
bitBlt( &wpPixmap, w-tmp.width(), 0,
&tmp, 0, 0, tmp.width(), tmp.height() );
break;
case BottomLeft:
bitBlt( &wpPixmap, 0, h-tmp.height(),
&tmp, 0, 0, tmp.width(), tmp.height() );
break;
case BottomRight:
bitBlt( &wpPixmap, w-tmp.width(), h-tmp.height(),
&tmp, 0, 0, tmp.width(), tmp.height() );
break;
case NoPic:
case Fancy:
break;
default:
{
wpPixmap = tmp;
}
break;
}
rv = TRUE;
}
else
{
debug("KDMBackgroundWidget::loadWallpaper(): failed loading %s", filename.ascii());
wallpaper = "";
}
if ( useContext )
QColor::leaveAllocContext();
return rv;
}
kcontrol'KDMBackgroundWidget::showSettings() (./kdebase/kcontrol/kdm/kdm-bgnd.cpp:441)
void KDMBackgroundWidget::showSettings()
{
wpGroup->setButton(wpMode);
cGroup->setButton(colorMode);
colButton1->setColor( color1 );
colButton2->setColor( color2 );
if(colorMode == Plain)
colButton2->setEnabled(false);
else
colButton2->setEnabled(true);
wpCombo->setCurrentItem( 0 );
for ( int i = 1; i < wpCombo->count(); i++ )
{
if ( wallpaper == wpCombo->text( i ) )
{
wpCombo->setCurrentItem( i );
break;
}
}
if ( wpMode == NoPic || !wallpaper.isEmpty() ) // && wpCombo->currentItem() == 0 )
{
loadWallpaper(wallpaper);
wpCombo->insertItem( wallpaper );
wpCombo->setCurrentItem( wpCombo->count()-1 );
}
if(wpMode == NoPic)
{
wpCombo->setEnabled(false);
button->setEnabled(false);
}
else
{
wpCombo->setEnabled(true);
button->setEnabled(true);
}
/*
((QRadioButton *)wpGroup->find( NoPic ))->setChecked( wpMode == NoPic );
((QRadioButton *)wpGroup->find( Tile ))->setChecked( wpMode == Tile );
((QRadioButton *)wpGroup->find( Center ))->setChecked( wpMode == Center );
((QRadioButton *)wpGroup->find( Scale ))->setChecked( wpMode == Scale );
((QRadioButton *)wpGroup->find( TopLeft ))->setChecked( wpMode == TopLeft );
((QRadioButton *)wpGroup->find( TopRight ))->setChecked( wpMode == TopRight );
((QRadioButton *)wpGroup->find( BottomLeft ))->setChecked( wpMode == BottomLeft );
((QRadioButton *)wpGroup->find( BottomRight ))->setChecked( wpMode == BottomRight );
((QRadioButton *)wpGroup->find( Fancy ))->setChecked( wpMode == Fancy );
((QRadioButton *)cGroup->find( Plain ))->setChecked( colorMode == Plain );
((QRadioButton *)cGroup->find( Horizontal ))->setChecked( colorMode == Horizontal );
((QRadioButton *)cGroup->find( Vertical ))->setChecked( colorMode == Vertical );
*/
setMonitor();
}
kcontrol'KDMBackgroundWidget::applySettings() (./kdebase/kcontrol/kdm/kdm-bgnd.cpp:499)
void KDMBackgroundWidget::applySettings()
{
//debug("KDMBackgroundWidget::applySettings()");
KSimpleConfig *c = new KSimpleConfig(locate("config", "kdmrc"));
c->setGroup("KDMDESKTOP");
// write color
c->writeEntry( "BackGroundColor1", color1 );
c->writeEntry( "BackGroundColor2", color2 );
switch( colorMode )
{
case Vertical:
c->writeEntry( "BackGroundColorMode", "Vertical" );
break;
case Horizontal:
c->writeEntry( "BackGroundColorMode", "Horizontal" );
break;
case Plain:
default:
c->writeEntry( "BackGroundColorMode", "Plain" );
break;
}
// write wallpaper
if(!wallpaper.isEmpty())
{
QFileInfo fi(wallpaper);
if(fi.exists())
c->writeEntry( "BackGroundPicture", wallpaper );
else
c->deleteEntry( "BackGroundPicture", false);
}
else
c->deleteEntry( "BackGroundPicture", false );
switch ( wpMode )
{
case NoPic:
c->writeEntry( "BackGroundPictureMode", "None" );
break;
case Tile:
c->writeEntry( "BackGroundPictureMode", "Tile" );
break;
case Center:
c->writeEntry( "BackGroundPictureMode", "Center" );
break;
case Scale:
c->writeEntry( "BackGroundPictureMode", "Scale" );
break;
case TopLeft:
c->writeEntry( "BackGroundPictureMode", "TopLeft" );
break;
case TopRight:
c->writeEntry( "BackGroundPictureMode", "TopRight" );
break;
case BottomLeft:
c->writeEntry( "BackGroundPictureMode", "BottomLeft" );
break;
case BottomRight:
c->writeEntry( "BackGroundPictureMode", "BottomRight" );
break;
case Fancy:
c->writeEntry( "BackGroundPictureMode", "Fancy" );
break;
} // switch
delete c;
}
kcontrol'KDMBackgroundWidget::loadSettings() (./kdebase/kcontrol/kdm/kdm-bgnd.cpp:571)
void KDMBackgroundWidget::loadSettings()
{
iconloader = KGlobal::iconLoader();
QString str;
// Get config object
KSimpleConfig *c = new KSimpleConfig(locate("config", "kdmrc"));
c->setGroup("KDMDESKTOP");
color1 = c->readColorEntry( "BackGroundColor1", &darkCyan);
color2 = c->readColorEntry( "BackGroundColor2", &darkBlue);
wallpaper = "";
str = c->readEntry( "BackGroundPicture" );
if ( !str.isEmpty() )
{
str = locate("wallpaper", str);
if(!str.isEmpty())
{
KGlobal::dirs()->
addResourceDir("wallpaper",
KGlobal::dirs()->
findResourceDir("wallpaper", str));
wallpaper = str;
}
}
QString strmode = c->readEntry( "BackGroundColorMode", "Plain");
if(strmode == "Plain")
colorMode = Plain;
else if(strmode == "Horizontal")
colorMode = Horizontal;
else if(strmode == "Vertical")
colorMode = Vertical;
else
colorMode = Plain;
strmode = c->readEntry( "BackGroundPictureMode", "Scale");
if(strmode == "None")
wpMode = NoPic;
else if(strmode == "Tile")
wpMode = Tile;
else if(strmode == "Center")
wpMode = Center;
else if(strmode == "Scale")
wpMode = Scale;
else if(strmode == "TopLeft")
wpMode = TopLeft;
else if(strmode == "TopRight")
wpMode = TopRight;
else if(strmode == "BottomLeft")
wpMode = BottomLeft;
else if(strmode == "BottomRight")
wpMode = BottomRight;
else if(strmode == "Fancy")
wpMode = Fancy;
else
wpMode = Tile;
delete c;
}