00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #include <qbuttongroup.h>
00022 #include <qlabel.h>
00023 #include <qlayout.h>
00024 #include <qradiobutton.h>
00025
00026 #include <kcolorbutton.h>
00027 #include <kcombobox.h>
00028 #include <kdebug.h>
00029 #include <kimagefilepreview.h>
00030 #include <klocale.h>
00031
00032 #include <kstandarddirs.h>
00033 #include <kurlrequester.h>
00034
00035 #include "konq_bgnddlg.h"
00036
00037
00038 KonqBgndDialog::KonqBgndDialog( QWidget* parent,
00039 const QString& pixmapFile,
00040 const QColor& theColor,
00041 const QColor& defaultColor )
00042 : KDialogBase( parent, "KonqBgndDialog", false,
00043 i18n("Background Settings"), Ok|Cancel, Ok, true )
00044 {
00045 QWidget* page = new QWidget( this );
00046 setMainWidget( page );
00047 QVBoxLayout* mainLayout = new QVBoxLayout( page, 0, KDialog::spacingHint() );
00048
00049 m_buttonGroup = new QButtonGroup( i18n("Background"), page );
00050 m_buttonGroup->setColumnLayout( 0, Qt::Vertical );
00051 m_buttonGroup->layout()->setMargin( KDialog::marginHint() );
00052 m_buttonGroup->layout()->setSpacing( KDialog::spacingHint() );
00053 QGridLayout* groupLayout = new QGridLayout( m_buttonGroup->layout() );
00054 groupLayout->setAlignment( Qt::AlignTop );
00055 mainLayout->addWidget( m_buttonGroup );
00056
00057 connect( m_buttonGroup, SIGNAL( clicked(int) ),
00058 this, SLOT( slotBackgroundModeChanged() ) );
00059
00060
00061 m_radioColor = new QRadioButton( i18n("Co&lor:"), m_buttonGroup );
00062 groupLayout->addWidget( m_radioColor, 0, 0 );
00063 m_buttonColor = new KColorButton( theColor, defaultColor, m_buttonGroup );
00064 m_buttonColor->setSizePolicy( QSizePolicy::Preferred,
00065 QSizePolicy::Minimum );
00066 groupLayout->addWidget( m_buttonColor, 0, 1 );
00067
00068 connect( m_buttonColor, SIGNAL( changed( const QColor& ) ),
00069 this, SLOT( slotColorChanged() ) );
00070
00071
00072 m_radioPicture = new QRadioButton( i18n("&Picture:"), m_buttonGroup );
00073 groupLayout->addWidget( m_radioPicture, 1, 0 );
00074 m_comboPicture = new KURLComboRequester( m_buttonGroup );
00075 groupLayout->addMultiCellWidget( m_comboPicture, 1, 1, 1, 2 );
00076 initPictures();
00077
00078 connect( m_comboPicture->comboBox(), SIGNAL( activated( int ) ),
00079 this, SLOT( slotPictureChanged() ) );
00080 connect( m_comboPicture, SIGNAL( urlSelected(const QString &) ),
00081 this, SLOT( slotPictureChanged() ) );
00082
00083 QSpacerItem* spacer1 = new QSpacerItem( 0, 0, QSizePolicy::Expanding,
00084 QSizePolicy::Minimum );
00085 groupLayout->addItem( spacer1, 0, 2 );
00086
00087
00088 QHBoxLayout* hlay = new QHBoxLayout( mainLayout, KDialog::spacingHint() );
00089
00090 QLabel* lbl = new QLabel( i18n("Preview"), page );
00091 hlay->addWidget( lbl );
00092 QFrame* frame = new QFrame( page );
00093 frame->setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Minimum );
00094 frame->setFrameShape( QFrame::HLine );
00095 frame->setFrameShadow( QFrame::Sunken );
00096 hlay->addWidget( frame );
00097
00098
00099 m_preview = new QFrame( page );
00100 m_preview->setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Expanding );
00101 m_preview->setMinimumSize( 370, 180 );
00102 m_preview->setFrameShape( QFrame::Panel );
00103 m_preview->setFrameShadow( QFrame::Raised );
00104 mainLayout->addWidget( m_preview );
00105
00106 if ( !pixmapFile.isEmpty() ) {
00107 loadPicture( pixmapFile );
00108 m_buttonColor->setColor( defaultColor );
00109 m_radioPicture->setChecked( true );
00110 }
00111 else {
00112 m_buttonColor->setColor( theColor );
00113 m_comboPicture->comboBox()->setCurrentItem( 0 );
00114 m_radioColor->setChecked( true );
00115 }
00116 slotBackgroundModeChanged();
00117 }
00118
00119 KonqBgndDialog::~KonqBgndDialog()
00120 {
00121 }
00122
00123 QColor KonqBgndDialog::color() const
00124 {
00125 if ( m_radioColor->isChecked() )
00126 return m_buttonColor->color();
00127
00128 return QColor();
00129 }
00130
00131 void KonqBgndDialog::initPictures()
00132 {
00133 KGlobal::dirs()->addResourceType( "tiles",
00134 KGlobal::dirs()->kde_default("data") + "konqueror/tiles/");
00135 kdDebug(1203) << KGlobal::dirs()->kde_default("data") + "konqueror/tiles/" << endl;
00136
00137 QStringList list = KGlobal::dirs()->findAllResources("tiles");
00138
00139 if ( list.isEmpty() )
00140 m_comboPicture->comboBox()->insertItem( i18n("None") );
00141 else {
00142 QStringList::ConstIterator it;
00143 for ( it = list.begin(); it != list.end(); it++ )
00144 m_comboPicture->comboBox()->insertItem(
00145 ( (*it).at(0) == '/' ) ?
00146 KURL( *it ).fileName() :
00147 *it );
00148 }
00149 }
00150
00151 void KonqBgndDialog::loadPicture( const QString& fileName )
00152 {
00153 int i ;
00154 for ( i = 0; i < m_comboPicture->comboBox()->count(); i++ ) {
00155 if ( fileName == m_comboPicture->comboBox()->text( i ) ) {
00156 m_comboPicture->comboBox()->setCurrentItem( i );
00157 return;
00158 }
00159 }
00160
00161 if ( !fileName.isEmpty() ) {
00162 m_comboPicture->comboBox()->insertItem( fileName );
00163 m_comboPicture->comboBox()->setCurrentItem( i );
00164 }
00165 else
00166 m_comboPicture->comboBox()->setCurrentItem( 0 );
00167 }
00168
00169 void KonqBgndDialog::slotPictureChanged()
00170 {
00171 m_pixmapFile = m_comboPicture->comboBox()->currentText();
00172 QString file = locate( "tiles", m_pixmapFile );
00173 if ( file.isEmpty() )
00174 file = locate("wallpaper", m_pixmapFile);
00175 if ( file.isEmpty() ) {
00176 kdWarning(1203) << "Couldn't locate wallpaper " << m_pixmapFile << endl;
00177 m_preview->unsetPalette();
00178 m_pixmap = QPixmap();
00179 m_pixmapFile = "";
00180 }
00181 else {
00182 m_pixmap.load( file );
00183
00184 if ( m_pixmap.isNull() )
00185 kdWarning(1203) << "Could not load wallpaper " << file << endl;
00186 }
00187 m_preview->setPaletteBackgroundPixmap( m_pixmap );
00188 }
00189
00190 void KonqBgndDialog::slotColorChanged()
00191 {
00192 m_preview->setPaletteBackgroundColor( m_buttonColor->color() );
00193 }
00194
00195 void KonqBgndDialog::slotBackgroundModeChanged()
00196 {
00197 if ( m_radioColor->isChecked() ) {
00198 m_buttonColor->setEnabled( true );
00199 m_comboPicture->setEnabled( false );
00200 m_pixmapFile = "";
00201 slotColorChanged();
00202 }
00203 else {
00204 m_comboPicture->setEnabled( true );
00205 m_buttonColor->setEnabled( false );
00206 slotPictureChanged();
00207 }
00208 }
00209
00210
00211 #include "konq_bgnddlg.moc"