You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
385 lines
12 KiB
385 lines
12 KiB
/*
|
|
* lookandfeeltab.cpp
|
|
*
|
|
* Copyright (c) 2000 Matthias Elter <elter@kde.org>
|
|
* Copyright (c) 2000 Aaron J. Seigo <aseigo@olympusproject.org>
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation; either version 2 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, write to the Free Software
|
|
*/
|
|
|
|
#include <tqcheckbox.h>
|
|
#include <tqlabel.h>
|
|
#include <tqradiobutton.h>
|
|
#include <tqregexp.h>
|
|
|
|
#include <kcolorbutton.h>
|
|
#include <kdebug.h>
|
|
#include <tdefiledialog.h>
|
|
#include <kiconeffect.h>
|
|
#include <kimageio.h>
|
|
#include <klineedit.h>
|
|
#include <tdelocale.h>
|
|
#include <tdemessagebox.h>
|
|
#include <kstandarddirs.h>
|
|
|
|
#include <kickerSettings.h>
|
|
#include "advancedDialog.h"
|
|
#include "global.h"
|
|
#include "main.h"
|
|
|
|
#include "lookandfeeltab_impl.h"
|
|
#include "lookandfeeltab_impl.moc"
|
|
|
|
#include <iostream>
|
|
using namespace std;
|
|
|
|
LookAndFeelTab::LookAndFeelTab( TQWidget *parent, const char* name )
|
|
: LookAndFeelTabBase(parent, name),
|
|
m_advDialog(0)
|
|
{
|
|
connect(m_kmenuTile, TQ_SIGNAL(activated(int)), TQ_SIGNAL(changed()));
|
|
connect(m_desktopTile, TQ_SIGNAL(activated(int)), TQ_SIGNAL(changed()));
|
|
connect(m_browserTile, TQ_SIGNAL(activated(int)), TQ_SIGNAL(changed()));
|
|
connect(m_urlTile, TQ_SIGNAL(activated(int)), TQ_SIGNAL(changed()));
|
|
connect(m_windowListTile, TQ_SIGNAL(activated(int)), TQ_SIGNAL(changed()));
|
|
|
|
connect(m_kmenuTile, TQ_SIGNAL(activated(int)), TQ_SLOT(kmenuTileChanged(int)));
|
|
connect(m_desktopTile, TQ_SIGNAL(activated(int)), TQ_SLOT(desktopTileChanged(int)));
|
|
connect(m_browserTile, TQ_SIGNAL(activated(int)), TQ_SLOT(browserTileChanged(int)));
|
|
connect(m_urlTile, TQ_SIGNAL(activated(int)), TQ_SLOT(urlTileChanged(int)));
|
|
connect(m_windowListTile, TQ_SIGNAL(activated(int)), TQ_SLOT(wlTileChanged(int)));
|
|
|
|
connect(kcfg_ColorizeBackground, TQ_SIGNAL(toggled(bool)), TQ_SLOT(browseTheme()));
|
|
|
|
connect(kcfg_BackgroundTheme->lineEdit(), TQ_SIGNAL(lostFocus()), TQ_SLOT(browseTheme()));
|
|
kcfg_BackgroundTheme->setFilter(KImageIO::pattern(KImageIO::Reading));
|
|
kcfg_BackgroundTheme->setCaption(i18n("Select Image File"));
|
|
|
|
fillTileCombos();
|
|
}
|
|
|
|
void LookAndFeelTab::browseTheme()
|
|
{
|
|
browseTheme(kcfg_BackgroundTheme->url());
|
|
}
|
|
|
|
void LookAndFeelTab::browseTheme(const TQString& newtheme)
|
|
{
|
|
if (newtheme.isEmpty())
|
|
{
|
|
kcfg_BackgroundTheme->clear();
|
|
m_backgroundLabel->setPixmap(TQPixmap());
|
|
emit changed();
|
|
return;
|
|
}
|
|
|
|
previewBackground(newtheme, true);
|
|
}
|
|
|
|
void LookAndFeelTab::launchAdvancedDialog()
|
|
{
|
|
if (!m_advDialog)
|
|
{
|
|
m_advDialog = new advancedDialog(this, "advancedDialog");
|
|
connect(m_advDialog, TQ_SIGNAL(finished()), this, TQ_SLOT(finishAdvancedDialog()));
|
|
m_advDialog->show();
|
|
}
|
|
m_advDialog->setActiveWindow();
|
|
}
|
|
|
|
void LookAndFeelTab::finishAdvancedDialog()
|
|
{
|
|
m_advDialog->delayedDestruct();
|
|
m_advDialog = 0;
|
|
}
|
|
|
|
void LookAndFeelTab::enableTransparency(bool useTransparency)
|
|
{
|
|
bool useBgTheme = kcfg_UseBackgroundTheme->isChecked();
|
|
|
|
kcfg_UseBackgroundTheme->setDisabled(useTransparency);
|
|
kcfg_BackgroundTheme->setDisabled(useTransparency || !useBgTheme);
|
|
m_backgroundLabel->setDisabled(useTransparency || !useBgTheme);
|
|
kcfg_ColorizeBackground->setDisabled(useTransparency || !useBgTheme);
|
|
}
|
|
|
|
void LookAndFeelTab::previewBackground(const TQString& themepath, bool isNew)
|
|
{
|
|
TQString theme = themepath;
|
|
if (theme[0] != '/')
|
|
theme = locate("data", "kicker/" + theme);
|
|
|
|
TQImage tmpImg(theme);
|
|
if(!tmpImg.isNull())
|
|
{
|
|
tmpImg = tmpImg.smoothScale(m_backgroundLabel->contentsRect().width(),
|
|
m_backgroundLabel->contentsRect().height());
|
|
if (kcfg_ColorizeBackground->isChecked())
|
|
KickerLib::colorize(tmpImg);
|
|
theme_preview.convertFromImage(tmpImg);
|
|
if(!theme_preview.isNull()) {
|
|
// avoid getting changed(true) from TDEConfigDialogManager for the default value
|
|
if( KickerSettings::backgroundTheme() == themepath )
|
|
KickerSettings::setBackgroundTheme( theme );
|
|
kcfg_BackgroundTheme->lineEdit()->setText(theme);
|
|
m_backgroundLabel->setPixmap(theme_preview);
|
|
if (isNew)
|
|
emit changed();
|
|
return;
|
|
}
|
|
}
|
|
|
|
KMessageBox::error(this,
|
|
i18n("Error loading theme image file.\n\n%1\n%2")
|
|
.arg(theme, themepath));
|
|
kcfg_BackgroundTheme->clear();
|
|
m_backgroundLabel->setPixmap(TQPixmap());
|
|
}
|
|
|
|
void LookAndFeelTab::load()
|
|
{
|
|
load( false );
|
|
}
|
|
|
|
void LookAndFeelTab::load(bool useDefaults)
|
|
{
|
|
TDEConfig config(KickerConfig::the()->configName(), false, false);
|
|
|
|
config.setReadDefaults( useDefaults );
|
|
|
|
config.setGroup("General");
|
|
|
|
bool use_theme = kcfg_UseBackgroundTheme->isChecked();
|
|
TQString theme = kcfg_BackgroundTheme->lineEdit()->text().stripWhiteSpace();
|
|
|
|
bool transparent = kcfg_Transparent->isChecked();
|
|
|
|
kcfg_BackgroundTheme->setEnabled(use_theme);
|
|
m_backgroundLabel->setEnabled(use_theme);
|
|
kcfg_ColorizeBackground->setEnabled(use_theme);
|
|
m_backgroundLabel->clear();
|
|
if (theme.length() > 0)
|
|
{
|
|
previewBackground(theme, false);
|
|
}
|
|
|
|
TQString tile;
|
|
config.setGroup("buttons");
|
|
|
|
kmenuTileChanged(m_kmenuTile->currentItem());
|
|
desktopTileChanged(m_desktopTile->currentItem());
|
|
urlTileChanged(m_urlTile->currentItem());
|
|
browserTileChanged(m_browserTile->currentItem());
|
|
wlTileChanged(m_windowListTile->currentItem());
|
|
|
|
if (config.readBoolEntry("EnableTileBackground", false))
|
|
{
|
|
config.setGroup("button_tiles");
|
|
|
|
if (config.readBoolEntry("EnableKMenuTiles", false))
|
|
{
|
|
tile = config.readEntry("KMenuTile", "solid_blue");
|
|
m_kmenuTile->setCurrentItem(m_tilename.findIndex(tile));
|
|
kcfg_KMenuTileColor->setEnabled(tile == "Colorize");
|
|
}
|
|
|
|
if (config.readBoolEntry("EnableDesktopButtonTiles", false))
|
|
{
|
|
tile = config.readEntry("DesktopButtonTile", "solid_orange");
|
|
m_desktopTile->setCurrentItem(m_tilename.findIndex(tile));
|
|
kcfg_DesktopButtonTileColor->setEnabled(tile == "Colorize");
|
|
}
|
|
|
|
if (config.readBoolEntry("EnableURLTiles", false))
|
|
{
|
|
tile = config.readEntry("URLTile", "solid_gray");
|
|
m_urlTile->setCurrentItem(m_tilename.findIndex(tile));
|
|
kcfg_URLTileColor->setEnabled(tile == "Colorize");
|
|
}
|
|
|
|
if (config.readBoolEntry("EnableBrowserTiles", false))
|
|
{
|
|
tile = config.readEntry("BrowserTile", "solid_green");
|
|
m_browserTile->setCurrentItem(m_tilename.findIndex(tile));
|
|
kcfg_BrowserTileColor->setEnabled(tile == "Colorize");
|
|
}
|
|
|
|
if (config.readBoolEntry("EnableWindowListTiles", false))
|
|
{
|
|
tile = config.readEntry("WindowListTile", "solid_green");
|
|
m_windowListTile->setCurrentItem(m_tilename.findIndex(tile));
|
|
kcfg_WindowListTileColor->setEnabled(tile == "Colorize");
|
|
}
|
|
}
|
|
enableTransparency( transparent );
|
|
}
|
|
|
|
void LookAndFeelTab::save()
|
|
{
|
|
TDEConfig config(KickerConfig::the()->configName(), false, false);
|
|
|
|
config.setGroup("General");
|
|
|
|
config.setGroup("button_tiles");
|
|
bool enableTiles = false;
|
|
int tile = m_kmenuTile->currentItem();
|
|
if (tile > 0)
|
|
{
|
|
enableTiles = true;
|
|
config.writeEntry("EnableKMenuTiles", true);
|
|
config.writeEntry("KMenuTile", m_tilename[m_kmenuTile->currentItem()]);
|
|
}
|
|
else
|
|
{
|
|
config.writeEntry("EnableKMenuTiles", false);
|
|
}
|
|
|
|
tile = m_desktopTile->currentItem();
|
|
if (tile > 0)
|
|
{
|
|
enableTiles = true;
|
|
config.writeEntry("EnableDesktopButtonTiles", true);
|
|
config.writeEntry("DesktopButtonTile", m_tilename[m_desktopTile->currentItem()]);
|
|
}
|
|
else
|
|
{
|
|
config.writeEntry("EnableDesktopButtonTiles", false);
|
|
}
|
|
|
|
tile = m_urlTile->currentItem();
|
|
if (tile > 0)
|
|
{
|
|
enableTiles = true;
|
|
config.writeEntry("EnableURLTiles", tile > 0);
|
|
config.writeEntry("URLTile", m_tilename[m_urlTile->currentItem()]);
|
|
}
|
|
else
|
|
{
|
|
config.writeEntry("EnableURLTiles", false);
|
|
}
|
|
|
|
tile = m_browserTile->currentItem();
|
|
if (tile > 0)
|
|
{
|
|
enableTiles = true;
|
|
config.writeEntry("EnableBrowserTiles", tile > 0);
|
|
config.writeEntry("BrowserTile", m_tilename[m_browserTile->currentItem()]);
|
|
}
|
|
else
|
|
{
|
|
config.writeEntry("EnableBrowserTiles", false);
|
|
}
|
|
|
|
tile = m_windowListTile->currentItem();
|
|
if (tile > 0)
|
|
{
|
|
enableTiles = true;
|
|
config.writeEntry("EnableWindowListTiles", tile > 0);
|
|
config.writeEntry("WindowListTile", m_tilename[m_windowListTile->currentItem()]);
|
|
}
|
|
else
|
|
{
|
|
config.writeEntry("EnableWindowListTiles", false);
|
|
}
|
|
|
|
config.setGroup("buttons");
|
|
config.writeEntry("EnableTileBackground", enableTiles);
|
|
|
|
config.sync();
|
|
}
|
|
|
|
void LookAndFeelTab::defaults()
|
|
{
|
|
load( true );
|
|
}
|
|
|
|
void LookAndFeelTab::fillTileCombos()
|
|
{
|
|
/* m_kmenuTile->clear();
|
|
m_kmenuTile->insertItem(i18n("Default"));
|
|
m_desktopTile->clear();
|
|
m_desktopTile->insertItem(i18n("Default"));
|
|
m_urlTile->clear();
|
|
m_urlTile->insertItem(i18n("Default"));
|
|
m_browserTile->clear();
|
|
m_browserTile->insertItem(i18n("Default"));
|
|
m_windowListTile->clear();
|
|
m_windowListTile->insertItem(i18n("Default"));*/
|
|
m_tilename.clear();
|
|
m_tilename << "" << "Colorize";
|
|
|
|
TQStringList list = TDEGlobal::dirs()->findAllResources("tiles","*_tiny_up.png");
|
|
int minHeight = 0;
|
|
|
|
for (TQStringList::Iterator it = list.begin(); it != list.end(); ++it)
|
|
{
|
|
TQString tile = (*it);
|
|
TQPixmap pix(tile);
|
|
TQFileInfo fi(tile);
|
|
tile = fi.fileName();
|
|
tile.truncate(tile.find("_tiny_up.png"));
|
|
m_tilename << tile;
|
|
|
|
// Transform tile to words with title case
|
|
// The same is done when generating messages for translation
|
|
TQStringList words = TQStringList::split(TQRegExp("[_ ]"), tile);
|
|
for (TQStringList::iterator w = words.begin(); w != words.end(); ++w)
|
|
(*w)[0] = (*w)[0].upper();
|
|
tile = i18n(words.join(" ").utf8());
|
|
|
|
m_kmenuTile->insertItem(pix, tile);
|
|
m_desktopTile->insertItem(pix, tile);
|
|
m_urlTile->insertItem(pix, tile);
|
|
m_browserTile->insertItem(pix, tile);
|
|
m_windowListTile->insertItem(pix, tile);
|
|
|
|
if (pix.height() > minHeight)
|
|
{
|
|
minHeight = pix.height();
|
|
}
|
|
}
|
|
|
|
minHeight += 6;
|
|
m_kmenuTile->setMinimumHeight(minHeight);
|
|
m_desktopTile->setMinimumHeight(minHeight);
|
|
m_urlTile->setMinimumHeight(minHeight);
|
|
m_browserTile->setMinimumHeight(minHeight);
|
|
m_windowListTile->setMinimumHeight(minHeight);
|
|
}
|
|
|
|
void LookAndFeelTab::kmenuTileChanged(int i)
|
|
{
|
|
kcfg_KMenuTileColor->setEnabled(i == 1);
|
|
}
|
|
|
|
void LookAndFeelTab::desktopTileChanged(int i)
|
|
{
|
|
kcfg_DesktopButtonTileColor->setEnabled(i == 1);
|
|
}
|
|
|
|
void LookAndFeelTab::browserTileChanged(int i)
|
|
{
|
|
kcfg_BrowserTileColor->setEnabled(i == 1);
|
|
}
|
|
|
|
void LookAndFeelTab::urlTileChanged(int i)
|
|
{
|
|
kcfg_URLTileColor->setEnabled(i == 1);
|
|
}
|
|
|
|
void LookAndFeelTab::wlTileChanged(int i)
|
|
{
|
|
kcfg_WindowListTileColor->setEnabled(i == 1);
|
|
}
|