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.
kshutdown/kshutdown/msystemtray.cpp

213 lines
4.8 KiB

/*
msystemtray.cpp - A system tray icon
Copyright (C) 2003 Konrad Twardowski <kdtonline@poczta.onet.pl>
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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include "configuration.h"
#include "miscutils.h"
#include "mmainwindow.h"
#include "msystemtray.h"
#include <ntqtimer.h>
#include <tdeaction.h>
#include <kdebug.h>
#include <kiconloader.h>
#include <tdelocale.h>
#include <kpixmap.h>
#include <kpixmapeffect.h>
#include <tdepopupmenu.h>
#include <twin.h>
const double
KS_TRAY_FADE_CHANGE = 0.05f,
KS_TRAY_FADE_MAX = 0.7f;
const int KS_TRAY_FADE_TIMEOUT = 50;
const TQColor KS_TRAY_FADE_COLOR = TQt::yellow;
MSystemTray::Mode MSystemTray::_mode = Always;
MSystemTray *MSystemTray::_instance = 0;
// public
MSystemTray::~MSystemTray()
{
if (_flashIcon)
delete _flashIcon;
if (_saveIcon)
delete _saveIcon;
}
void MSystemTray::flashIcon()
{
if (_saveIcon)
delete _saveIcon;
_saveIcon = new TQPixmap();
*_saveIcon = *pixmap();
_flashCount = 0;
setPixmap(*_flashIcon);
_flashTimer->start(200);
}
void MSystemTray::setActive(const bool yes)
{
// kdDebug() << "MSystemTray::setActive: " << yes << endl;
if (_active == yes)
return;
_active = yes;
_incFade = _active;
_fadeTimer->start(KS_TRAY_FADE_TIMEOUT);
}
void MSystemTray::setMode(const Mode mode)
{
// kdDebug() << "MSystemTray::setMode: " << mode << endl;
_mode = mode;
switch (_mode)
{
case Always:
ks_tray; // init instance
if (ks_actions->active())
_instance->setActive(true);
_instance->show();
MiscUtils::setAutostart(true);
break;
case IfActive:
if (ks_actions->active())
{
ks_tray; // init instance
_instance->setActive(true);
_instance->show();
MiscUtils::setAutostart(true);
}
else
{
delete _instance;
_instance = 0;
MiscUtils::setAutostart(false);
}
break;
case Never:
delete _instance;
_instance = 0;
MiscUtils::setAutostart(false);
break;
}
}
// protected
void MSystemTray::mousePressEvent(TQMouseEvent *e)
{
// middle mouse button - display actions menu
// TODO: 2.0: configure middle button action
if (e->button() == MidButton)
contextMenu()->popup(e->globalPos());
else
KSystemTray::mousePressEvent(e);
}
// private
MSystemTray::MSystemTray()
: KSystemTray(ks_main, "MSystemTray"),
_active(false),
_incFade(true),
_fadeValue(0.0f),
_flashCount(0),
_saveIcon(0)
{
setPixmap(SmallIcon("exit", TDEIcon::SizeSmallMedium)); // 22x22
// TODO: 2.0: mouse wheel: decrease/increase end time by 5min. (?)
// init fade timer
_fadeTimer = new TQTimer(this);
connect(_fadeTimer, SIGNAL(timeout()), SLOT(slotFade()));
// init flash timer
_flashTimer = new TQTimer(this);
connect(_flashTimer, SIGNAL(timeout()), SLOT(slotFlashTimeout()));
// init icons
KPixmap pm(SmallIcon("exit", TDEIcon::SizeSmallMedium));
_flashIcon = new KPixmap(KPixmapEffect::fade(pm, 0.7f, white));
show();
// add some items to the context menu
TDEPopupMenu *pm_systemTrayMenu = contextMenu();
pm_systemTrayMenu->setCaption("KShutDown");
// id 0 = title
ks_main->shutDownAction()->plug(pm_systemTrayMenu, 1);
ks_main->rebootAction()->plug(pm_systemTrayMenu, 2);
ks_main->lockScreenAction()->plug(pm_systemTrayMenu, 3);
ks_main->logoutAction()->plug(pm_systemTrayMenu, 4);
pm_systemTrayMenu->insertSeparator(5);
ks_main->cancelAction()->plug(pm_systemTrayMenu, 6);
pm_systemTrayMenu->insertSeparator(7);
ks_main->configureKShutDownAction()->plug(pm_systemTrayMenu, 8);
pm_systemTrayMenu->insertTearOffHandle();
// quit signal
connect(
this, SIGNAL(quitSelected()),
ks_main, SLOT(slotQuit()));
}
// private slots
void MSystemTray::slotFade()
{
if (_incFade)
{
_fadeValue += KS_TRAY_FADE_CHANGE;
if (_fadeValue > KS_TRAY_FADE_MAX)
{
_fadeTimer->stop();
_fadeValue = KS_TRAY_FADE_MAX;
}
}
else
{
_fadeValue -= KS_TRAY_FADE_CHANGE;
if (_fadeValue < 0.0f)
{
_fadeTimer->stop();
_fadeValue = 0.0f;
}
}
KPixmap p(SmallIcon("exit", TDEIcon::SizeSmallMedium));
setPixmap(KPixmapEffect::fade(p, _fadeValue, KS_TRAY_FADE_COLOR));
}
void MSystemTray::slotFlashTimeout()
{
_flashCount++;
if ((_flashCount % 2) == 0)
setPixmap(*_saveIcon);
else
setPixmap(*_flashIcon);
if (_flashCount == 6)
_flashTimer->stop();
}