mirror of
https://bitbucket.org/smil3y/kde-workspace.git
synced 2025-02-24 19:02:51 +00:00
253 lines
8.3 KiB
C++
253 lines
8.3 KiB
C++
/*
|
|
Copyright (c) 1997 Christian Czezatke (e9025461@student.tuwien.ac.at)
|
|
1998 Bernd Wuebben <wuebben@kde.org>
|
|
2000 Matthias Elter <elter@kde.org>
|
|
2001 Carsten PFeiffer <pfeiffer@kde.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
|
|
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
*/
|
|
|
|
#include <QCheckBox>
|
|
#include <QPushButton>
|
|
|
|
|
|
//Added by qt3to4:
|
|
#include <QVBoxLayout>
|
|
#include <QFormLayout>
|
|
#include <QBoxLayout>
|
|
#include <QGroupBox>
|
|
|
|
#include <kcmodule.h>
|
|
#include <kaboutdata.h>
|
|
#include <kapplication.h>
|
|
#include <kconfig.h>
|
|
#include <kdialog.h>
|
|
#include <knotification.h>
|
|
#include <klocale.h>
|
|
#include <knuminput.h>
|
|
|
|
#include "bell.h"
|
|
#include "bell.moc"
|
|
|
|
#include <X11/Xlib.h>
|
|
#include <QX11Info>
|
|
#include <kpluginfactory.h>
|
|
#include <kpluginloader.h>
|
|
|
|
|
|
|
|
K_PLUGIN_FACTORY(KBellConfigFactory, registerPlugin<KBellConfig>();)
|
|
K_EXPORT_PLUGIN(KBellConfigFactory("kcmbell"))
|
|
|
|
|
|
|
|
extern "C"
|
|
{
|
|
KDE_EXPORT void kcminit_bell()
|
|
{
|
|
XKeyboardState kbd;
|
|
XKeyboardControl kbdc;
|
|
|
|
XGetKeyboardControl(QX11Info::display(), &kbd);
|
|
|
|
KConfig _config( "kcmbellrc", KConfig::NoGlobals );
|
|
KConfigGroup config(&_config, "General");
|
|
|
|
kbdc.bell_percent = config.readEntry("Volume", kbd.bell_percent);
|
|
kbdc.bell_pitch = config.readEntry("Pitch", kbd.bell_pitch);
|
|
kbdc.bell_duration = config.readEntry("Duration", kbd.bell_duration);
|
|
XChangeKeyboardControl(QX11Info::display(),
|
|
KBBellPercent | KBBellPitch | KBBellDuration,
|
|
&kbdc);
|
|
}
|
|
}
|
|
|
|
KBellConfig::KBellConfig(QWidget *parent, const QVariantList &args):
|
|
KCModule(KBellConfigFactory::componentData(), parent, args)
|
|
{
|
|
QBoxLayout *layout = new QVBoxLayout(this);
|
|
layout->setMargin(0);
|
|
|
|
QGroupBox *box = new QGroupBox(i18n("Bell Settings"), this );
|
|
QFormLayout *form = new QFormLayout();
|
|
box->setLayout(form);
|
|
layout->addWidget(box);
|
|
|
|
m_useBell = new QCheckBox( i18n("&Use system bell instead of system notification" ), box );
|
|
m_useBell->setWhatsThis( i18n("You can use the standard system bell (PC speaker) or a "
|
|
"more sophisticated system notification, see the "
|
|
"\"System Notifications\" control module for the "
|
|
"\"Something Special Happened in the Program\" event."));
|
|
connect(m_useBell, SIGNAL(toggled(bool)), SLOT(useBell(bool)));
|
|
form->addRow(m_useBell);
|
|
|
|
setQuickHelp( i18n("<h1>System Bell</h1> Here you can customize the sound of the standard system bell,"
|
|
" i.e. the \"beep\" you always hear when there is something wrong. Note that you can further"
|
|
" customize this sound using the \"Accessibility\" control module; for example, you can choose"
|
|
" a sound file to be played instead of the standard bell."));
|
|
|
|
m_volume = new KIntNumInput(50, box);
|
|
m_volume->setRange(0, 100, 5);
|
|
m_volume->setSuffix("%");
|
|
m_volume->setSteps(5,25);
|
|
form->addRow(i18n("&Volume:"), m_volume);
|
|
m_volume->setWhatsThis( i18n("Here you can customize the volume of the system bell. For further"
|
|
" customization of the bell, see the \"Accessibility\" control module.") );
|
|
|
|
m_pitch = new KIntNumInput(800, box);
|
|
m_pitch->setRange(20, 2000, 20);
|
|
m_pitch->setSuffix(i18n(" Hz"));
|
|
m_pitch->setSteps(40,200);
|
|
form->addRow(i18n("&Pitch:"), m_pitch);
|
|
m_pitch->setWhatsThis( i18n("Here you can customize the pitch of the system bell. For further"
|
|
" customization of the bell, see the \"Accessibility\" control module.") );
|
|
|
|
m_duration = new KIntNumInput(100, box);
|
|
m_duration->setRange(1, 1000, 50);
|
|
m_duration->setSuffix(i18n(" msec"));
|
|
m_duration->setSteps(20,100);
|
|
form->addRow(i18n("&Duration:"), m_duration);
|
|
m_duration->setWhatsThis( i18n("Here you can customize the duration of the system bell. For further"
|
|
" customization of the bell, see the \"Accessibility\" control module.") );
|
|
|
|
m_testButton = new QPushButton(i18n("&Test"), box);
|
|
m_testButton->setObjectName("test");
|
|
form->addRow(QString(), m_testButton);
|
|
connect( m_testButton, SIGNAL(clicked()), SLOT(ringBell()));
|
|
m_testButton->setWhatsThis( i18n("Click \"Test\" to hear how the system bell will sound using your changed settings.") );
|
|
|
|
// watch for changes
|
|
connect(m_volume, SIGNAL(valueChanged(int)), SLOT(changed()));
|
|
connect(m_pitch, SIGNAL(valueChanged(int)), SLOT(changed()));
|
|
connect(m_duration, SIGNAL(valueChanged(int)), SLOT(changed()));
|
|
|
|
KAboutData *about =
|
|
new KAboutData(I18N_NOOP("kcmbell"), 0, ki18n("KDE Bell Control Module"),
|
|
0, KLocalizedString(), KAboutData::License_GPL,
|
|
ki18n("(c) 1997 - 2001 Christian Czezatke, Matthias Elter"));
|
|
|
|
about->addAuthor(ki18n("Christian Czezatke"), ki18n("Original author"), "e9025461@student.tuwien.ac.at");
|
|
about->addAuthor(ki18n("Bernd Wuebben"), KLocalizedString(), "wuebben@kde.org");
|
|
about->addAuthor(ki18n("Matthias Elter"), ki18n("Current maintainer"), "elter@kde.org");
|
|
about->addAuthor(ki18n("Carsten Pfeiffer"), KLocalizedString(), "pfeiffer@kde.org");
|
|
setAboutData(about);
|
|
}
|
|
|
|
void KBellConfig::load()
|
|
{
|
|
XKeyboardState kbd;
|
|
XGetKeyboardControl(QX11Info::display(), &kbd);
|
|
|
|
m_volume->setValue(kbd.bell_percent);
|
|
m_pitch->setValue(kbd.bell_pitch);
|
|
m_duration->setValue(kbd.bell_duration);
|
|
|
|
KConfig _cfg("kdeglobals", KConfig::NoGlobals);
|
|
KConfigGroup cfg(&_cfg, "General");
|
|
m_useBell->setChecked(cfg.readEntry("UseSystemBell", false));
|
|
useBell(m_useBell->isChecked());
|
|
emit changed(false);
|
|
}
|
|
|
|
void KBellConfig::save()
|
|
{
|
|
XKeyboardControl kbd;
|
|
|
|
int bellVolume = m_volume->value();
|
|
int bellPitch = m_pitch->value();
|
|
int bellDuration = m_duration->value();
|
|
|
|
kbd.bell_percent = bellVolume;
|
|
kbd.bell_pitch = bellPitch;
|
|
kbd.bell_duration = bellDuration;
|
|
XChangeKeyboardControl(QX11Info::display(),
|
|
KBBellPercent | KBBellPitch | KBBellDuration,
|
|
&kbd);
|
|
|
|
KConfig _config("kcmbellrc", KConfig::NoGlobals);
|
|
KConfigGroup config(&_config, "General");
|
|
config.writeEntry("Volume",bellVolume);
|
|
config.writeEntry("Pitch",bellPitch);
|
|
config.writeEntry("Duration",bellDuration);
|
|
|
|
config.sync();
|
|
|
|
KConfig _cfg("kdeglobals", KConfig::NoGlobals);
|
|
KConfigGroup cfg(&_cfg, "General");
|
|
cfg.writeEntry("UseSystemBell", m_useBell->isChecked());
|
|
cfg.sync();
|
|
|
|
if (!m_useBell->isChecked())
|
|
{
|
|
KConfig config("kaccessrc");
|
|
|
|
KConfigGroup group = config.group("Bell");
|
|
group.writeEntry("SystemBell", false);
|
|
group.writeEntry("ArtsBell", false);
|
|
group.writeEntry("VisibleBell", false);
|
|
}
|
|
}
|
|
|
|
void KBellConfig::ringBell()
|
|
{
|
|
if (!m_useBell->isChecked()) {
|
|
KNotification::beep(QString(), this);
|
|
return;
|
|
}
|
|
|
|
// store the old state
|
|
XKeyboardState old_state;
|
|
XGetKeyboardControl(QX11Info::display(), &old_state);
|
|
|
|
// switch to the test state
|
|
XKeyboardControl kbd;
|
|
kbd.bell_percent = m_volume->value();
|
|
kbd.bell_pitch = m_pitch->value();
|
|
if (m_volume->value() > 0)
|
|
kbd.bell_duration = m_duration->value();
|
|
else
|
|
kbd.bell_duration = 0;
|
|
XChangeKeyboardControl(QX11Info::display(),
|
|
KBBellPercent | KBBellPitch | KBBellDuration,
|
|
&kbd);
|
|
// ring bell
|
|
XBell(QX11Info::display(),0);
|
|
|
|
// restore old state
|
|
kbd.bell_percent = old_state.bell_percent;
|
|
kbd.bell_pitch = old_state.bell_pitch;
|
|
kbd.bell_duration = old_state.bell_duration;
|
|
XChangeKeyboardControl(QX11Info::display(),
|
|
KBBellPercent | KBBellPitch | KBBellDuration,
|
|
&kbd);
|
|
}
|
|
|
|
void KBellConfig::defaults()
|
|
{
|
|
m_volume->setValue(100);
|
|
m_pitch->setValue(800);
|
|
m_duration->setValue(100);
|
|
m_useBell->setChecked( false );
|
|
useBell( false );
|
|
}
|
|
|
|
void KBellConfig::useBell( bool on )
|
|
{
|
|
m_volume->setEnabled( on );
|
|
m_pitch->setEnabled( on );
|
|
m_duration->setEnabled( on );
|
|
m_testButton->setEnabled( on );
|
|
changed();
|
|
}
|