summaryrefslogtreecommitdiffstats
path: root/twin-styles/glow/config/glowconfigdialog.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'twin-styles/glow/config/glowconfigdialog.cpp')
-rw-r--r--twin-styles/glow/config/glowconfigdialog.cpp369
1 files changed, 369 insertions, 0 deletions
diff --git a/twin-styles/glow/config/glowconfigdialog.cpp b/twin-styles/glow/config/glowconfigdialog.cpp
new file mode 100644
index 00000000..f8ff62fd
--- /dev/null
+++ b/twin-styles/glow/config/glowconfigdialog.cpp
@@ -0,0 +1,369 @@
+/***************************************************************************
+ glowconfigdialog.cpp - description
+ -------------------
+ begin : Thu Sep 12 2001
+ copyright : (C) 2001 by Henning Burchardt
+ email : h_burchardt@gmx.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#include <tqbitmap.h>
+#include <tqbuttongroup.h>
+#include <tqcheckbox.h>
+#include <tqcombobox.h>
+#include <tqdir.h>
+#include <tqfileinfo.h>
+#include <tqgroupbox.h>
+#include <tqlabel.h>
+#include <tqlayout.h>
+#include <tqlistview.h>
+#include <tqpushbutton.h>
+#include <tqsignalmapper.h>
+#include <tqstringlist.h>
+#include <kconfig.h>
+#include <kcolorbutton.h>
+#include <kdebug.h>
+#include <kglobal.h>
+#include <kglobalsettings.h>
+#include <klocale.h>
+#include <kpixmap.h>
+#include <kpixmapeffect.h>
+#include <kstandarddirs.h>
+#include "bitmaps.h"
+#include "glowconfigdialog.h"
+#include "../resources.h"
+
+#define NUMBER_OF_BUTTONS 5
+
+extern "C"
+{
+ KDE_EXPORT TQObject* allocate_config( KConfig* conf, TQWidget* parent )
+ {
+ return(new GlowConfigDialog(conf, parent));
+ }
+}
+
+GlowConfigDialog::GlowConfigDialog( KConfig * conf, TQWidget * parent )
+ : TQObject(parent)
+{
+ _glowConfig = new KConfig("twinglowrc");
+ KGlobal::locale()->insertCatalogue("twin_glow_config");
+
+ _main_group_box = new TQWidget(parent);
+ TQVBoxLayout *main_group_boxLayout = new TQVBoxLayout(_main_group_box);
+ main_group_boxLayout->tqsetAlignment(TQt::AlignTop | TQt::AlignLeft);
+ main_group_boxLayout->setSpacing(6);
+
+ //-------------------------------------------------------------------------
+ // themes
+
+ _theme_list_view = new TQListView (_main_group_box, "theme_list_view");
+ _theme_list_view->addColumn (i18n("Theme"));
+ _theme_list_view->addColumn (i18n("Button Size"));
+ _theme_list_view->setAllColumnsShowFocus(true);
+ _theme_list_view->setResizeMode(TQListView::AllColumns);
+
+ main_group_boxLayout->addWidget (_theme_list_view);
+ TQObject::connect (_theme_list_view, TQT_SIGNAL(selectionChanged()),
+ this, TQT_SLOT(slotThemeListViewSelectionChanged()));
+ slotLoadThemeList();
+
+ _button_glow_color_group_box = new TQGroupBox(
+ 0, Qt::Horizontal, i18n("Button Glow Colors"), _main_group_box);
+ TQHBoxLayout *colorHBoxLayout =
+ new TQHBoxLayout(_button_glow_color_group_box->tqlayout());
+
+ // create buttons
+ TQSize buttonSize(BITMAP_SIZE, BITMAP_SIZE);
+ TQPixmap pm(buttonSize);
+ pm.fill(TQt::black);
+
+ _stickyButton = new TQPushButton(_button_glow_color_group_box);
+ pm.setMask(TQBitmap(buttonSize, stickyoff_bits, true));
+ _stickyButton->setPixmap(pm);
+ colorHBoxLayout->addWidget(_stickyButton);
+ _titleButtonList.push_back(_stickyButton);
+
+ _helpButton = new TQPushButton(_button_glow_color_group_box);
+ pm.setMask(TQBitmap(buttonSize, help_bits, true));
+ _helpButton->setPixmap(pm);
+ colorHBoxLayout->addWidget(_helpButton);
+ _titleButtonList.push_back(_helpButton);
+
+ _iconifyButton = new TQPushButton(_button_glow_color_group_box);
+ pm.setMask(TQBitmap(buttonSize, minimize_bits, true));
+ _iconifyButton->setPixmap(pm);
+ colorHBoxLayout->addWidget(_iconifyButton);
+ _titleButtonList.push_back(_iconifyButton);
+
+ _maximizeButton = new TQPushButton(_button_glow_color_group_box);
+ pm.setMask(TQBitmap(buttonSize, maximizeoff_bits, true));
+ _maximizeButton->setPixmap(pm);
+ colorHBoxLayout->addWidget(_maximizeButton);
+ _titleButtonList.push_back(_maximizeButton);
+
+ _closeButton = new TQPushButton(_button_glow_color_group_box);
+ pm.setMask(TQBitmap(buttonSize, close_bits, true));
+ _closeButton->setPixmap(pm);
+ colorHBoxLayout->addWidget(_closeButton);
+ _titleButtonList.push_back(_closeButton);
+
+ // create signal mapper
+ _titleButtonMapper = new TQSignalMapper(this);
+ for( uint i=0; i<_titleButtonList.size(); i++ ) {
+ _titleButtonMapper->setMapping(TQT_TQOBJECT(_titleButtonList[i]), i);
+ connect(_titleButtonList[i], TQT_SIGNAL(clicked()),_titleButtonMapper, TQT_SLOT(map()));
+ }
+ connect(_titleButtonMapper, TQT_SIGNAL(mapped(int)),this, TQT_SLOT(slotTitleButtonClicked(int)));
+
+ _colorButton = new KColorButton(_button_glow_color_group_box);
+ _colorButton->setEnabled(false);
+ connect(_colorButton, TQT_SIGNAL(changed(const TQColor&)),
+ this, TQT_SLOT(slotColorButtonChanged(const TQColor&)));
+
+ colorHBoxLayout->addItem(new TQSpacerItem(
+ 200, 20, TQSizePolicy::Expanding, TQSizePolicy::Minimum));
+ colorHBoxLayout->addWidget(_colorButton);
+
+ main_group_boxLayout->addWidget(_button_glow_color_group_box);
+
+ TQHBoxLayout *titlebarGradientTypeLayout = new TQHBoxLayout();
+ _titlebarGradientTypeComboBox = new TQComboBox(_main_group_box);
+
+ KConfig *c = KGlobal::config();
+ KConfigGroupSaver cgs( c, TQString::tqfromLatin1("WM") );
+ TQColor activeBackground = c->readColorEntry("activeBackground");
+ TQColor activeBlend = c->readColorEntry("activeBlend");
+
+ // If the colors are equal, change one to get a gradient effect
+ if (activeBackground==activeBlend) {
+ activeBackground = activeBackground.dark();
+ }
+ for (int i=0; i< KPixmapEffect::EllipticGradient; i++ ) {
+ KPixmap gradPixmap(TQSize(196,20));
+ KPixmapEffect::gradient(gradPixmap, activeBackground,
+ activeBlend, (KPixmapEffect::GradientType) i);
+
+ _titlebarGradientTypeComboBox->insertItem(gradPixmap, i);
+ }
+
+ connect(_titlebarGradientTypeComboBox, TQT_SIGNAL(activated(int)),
+ this, TQT_SLOT(slotTitlebarGradientTypeChanged(int)));
+ titlebarGradientTypeLayout->addWidget(
+ new TQLabel(i18n("Titlebar gradient:"), _main_group_box));
+ titlebarGradientTypeLayout->addWidget(_titlebarGradientTypeComboBox, 0, TQt::AlignLeft);
+ titlebarGradientTypeLayout->addStretch(10);
+ main_group_boxLayout->addLayout(titlebarGradientTypeLayout);
+
+
+ _showResizeHandleCheckBox = new TQCheckBox(
+ i18n("Show resize handle"), _main_group_box);
+ connect(_showResizeHandleCheckBox, TQT_SIGNAL(clicked()),
+ this, TQT_SLOT(slotResizeHandleCheckBoxChanged()));
+ main_group_boxLayout->addWidget(_showResizeHandleCheckBox);
+
+ // load config and update user interface
+ load(conf);
+
+ _main_group_box->show();
+}
+
+GlowConfigDialog::~GlowConfigDialog()
+{
+ delete _main_group_box;
+ delete _glowConfig;
+ delete[] _buttonConfigMap;
+}
+
+void GlowConfigDialog::load( KConfig* /* conf */ )
+{
+ TQColor color;
+ const TQColor defaultCloseButtonColor(DEFAULT_CLOSE_BUTTON_COLOR);
+ const TQColor defaultMaximizeButtonColor(DEFAULT_MAXIMIZE_BUTTON_COLOR);
+ const TQColor defaultIconifyButtonColor(DEFAULT_ICONIFY_BUTTON_COLOR);
+ const TQColor defaultHelpButtonColor(DEFAULT_HELP_BUTTON_COLOR);
+ const TQColor defaultStickyButtonColor(DEFAULT_STICKY_BUTTON_COLOR);
+
+ _glowConfig->setGroup("General");
+
+ _buttonConfigMap = new TQColor[NUMBER_OF_BUTTONS];
+ color = _glowConfig->readColorEntry("stickyButtonGlowColor",
+ &defaultStickyButtonColor);
+ _buttonConfigMap[stickyButton] = color;
+
+ color = _glowConfig->readColorEntry("helpButtonGlowColor",
+ &defaultHelpButtonColor);
+ _buttonConfigMap[helpButton] = color;
+
+ color = _glowConfig->readColorEntry("iconifyButtonGlowColor",
+ &defaultIconifyButtonColor);
+ _buttonConfigMap[iconifyButton] = color;
+
+ color = _glowConfig->readColorEntry("maximizeButtonGlowColor",
+ &defaultMaximizeButtonColor);
+ _buttonConfigMap[maximizeButton] = color;
+
+ color = _glowConfig->readColorEntry("closeButtonGlowColor",
+ &defaultCloseButtonColor);
+ _buttonConfigMap[closeButton] = color;
+
+ _showResizeHandle = _glowConfig->readBoolEntry("showResizeHandle", true);
+ _titlebarGradientType = static_cast<KPixmapEffect::GradientType>
+ (_glowConfig->readNumEntry("titlebarGradientType",
+ KPixmapEffect::DiagonalGradient));
+
+ _showResizeHandleCheckBox->setChecked(_showResizeHandle);
+ _titlebarGradientTypeComboBox->setCurrentItem(_titlebarGradientType);
+
+ _theme_name = _glowConfig->readEntry ("themeName", "default");
+ _theme_list_view->setSelected (
+ _theme_list_view->findItem (_theme_name, 0), true);
+ slotTitleButtonClicked(0);
+}
+
+void GlowConfigDialog::save( KConfig* /* conf */ )
+{
+ _glowConfig->setGroup("General");
+
+ _glowConfig->writeEntry("stickyButtonGlowColor", _buttonConfigMap[stickyButton]);
+ _glowConfig->writeEntry("helpButtonGlowColor", _buttonConfigMap[helpButton]);
+ _glowConfig->writeEntry("iconifyButtonGlowColor", _buttonConfigMap[iconifyButton]);
+ _glowConfig->writeEntry("maximizeButtonGlowColor", _buttonConfigMap[maximizeButton]);
+ _glowConfig->writeEntry("closeButtonGlowColor", _buttonConfigMap[closeButton]);
+
+ _glowConfig->writeEntry("showResizeHandle", _showResizeHandle);
+ _glowConfig->writeEntry("titlebarGradientType", _titlebarGradientType);
+
+ _glowConfig->writeEntry ("themeName", _theme_name);
+
+ _glowConfig->sync();
+}
+
+void GlowConfigDialog::defaults()
+{
+ const TQColor defaultCloseButtonColor = DEFAULT_CLOSE_BUTTON_COLOR;
+ const TQColor defaultMaximizeButtonColor(DEFAULT_MAXIMIZE_BUTTON_COLOR);
+ const TQColor defaultIconifyButtonColor(DEFAULT_ICONIFY_BUTTON_COLOR);
+ const TQColor defaultHelpButtonColor(DEFAULT_HELP_BUTTON_COLOR);
+ const TQColor defaultStickyButtonColor(DEFAULT_STICKY_BUTTON_COLOR);
+
+ _buttonConfigMap[stickyButton] = defaultStickyButtonColor;
+ _buttonConfigMap[helpButton] = defaultHelpButtonColor;
+ _buttonConfigMap[iconifyButton] = defaultIconifyButtonColor;
+ _buttonConfigMap[maximizeButton] = defaultMaximizeButtonColor;
+ _buttonConfigMap[closeButton] = defaultCloseButtonColor;
+
+ _showResizeHandle = true;
+ _titlebarGradientType = KPixmapEffect::DiagonalGradient;
+
+ _showResizeHandleCheckBox->setChecked(_showResizeHandle);
+ _titlebarGradientTypeComboBox->setCurrentItem(_titlebarGradientType);
+
+ _theme_list_view->setSelected (
+ _theme_list_view->findItem("default", 0), true);
+}
+
+void GlowConfigDialog::slotLoadThemeList ()
+{
+ TQStringList dir_list=KGlobal::dirs()->findDirs("data", "twin/glow-themes");
+
+ TQStringList::ConstIterator it;
+
+ _theme_list_view->clear();
+ new TQListViewItem (_theme_list_view, "default", "17x17");
+
+ for (it=dir_list.begin(); it!=dir_list.end(); ++it)
+ {
+ TQDir dir (*it, TQString("*"), TQDir::Unsorted,
+ TQDir::Dirs | TQDir::Readable);
+ if (dir.exists())
+ {
+ TQFileInfoListIterator it2(*dir.entryInfoList());
+ TQFileInfo * finfo;
+
+ while ((finfo=it2.current()))
+ {
+ if (finfo->fileName() == "." || finfo->fileName() == "..") {
+ ++it2;
+ continue;
+ }
+
+ if (! _theme_list_view->findItem (finfo->fileName(), 0))
+ {
+ KConfig conf (dir.path() + "/" + finfo->fileName() + "/" +
+ finfo->fileName() + ".theme");
+ TQSize button_size = conf.readSizeEntry (
+ "buttonSize", new TQSize (-1, -1));
+ if (button_size.width() == -1)
+ {
+ ++it2;
+ continue;
+ }
+ TQString size_string = TQString("") +
+ TQString::number(button_size.width()) +
+ "x" + TQString::number(button_size.height());
+ new TQListViewItem (_theme_list_view,
+ finfo->fileName(), size_string);
+ }
+
+ ++it2;
+ }
+ }
+ }
+}
+
+void GlowConfigDialog::slotTitlebarGradientTypeChanged(int index)
+{
+ _titlebarGradientType = static_cast<KPixmapEffect::GradientType>(index);
+ emit changed();
+}
+
+void GlowConfigDialog::slotResizeHandleCheckBoxChanged()
+{
+ _showResizeHandle = _showResizeHandleCheckBox->isChecked();
+ emit changed();
+}
+
+void GlowConfigDialog::slotTitleButtonClicked(int index)
+{
+ for( int i=0; i< ((int) _titleButtonList.size()); i++ ) {
+ _titleButtonList[i]->setDown(i==index);
+ }
+ _colorButton->setEnabled(true);
+ _colorButton->setColor(_buttonConfigMap[index]);
+}
+
+void GlowConfigDialog::slotColorButtonChanged(const TQColor& glowColor)
+{
+ if( _stickyButton->isDown() ) {
+ _buttonConfigMap[stickyButton] = glowColor;
+ } else if( _helpButton->isDown() ) {
+ _buttonConfigMap[helpButton] = glowColor;
+ } else if( _iconifyButton->isDown() ) {
+ _buttonConfigMap[iconifyButton] = glowColor;
+ } else if( _maximizeButton->isDown() ) {
+ _buttonConfigMap[maximizeButton] = glowColor;
+ } else {
+ _buttonConfigMap[closeButton] = glowColor;
+ }
+ emit changed();
+}
+
+void GlowConfigDialog::slotThemeListViewSelectionChanged ()
+{
+ if( _theme_list_view->selectedItem() != 0 ) {
+ _theme_name = _theme_list_view->selectedItem()->text (0);
+
+ emit changed();
+ }
+}
+
+#include "glowconfigdialog.moc"