Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.
kkbswitch/kkbswitch/kbswitchtrayicon.cpp

203 lignes
6.2 KiB

/***************************************************************************
kbswitchtrayicon.cpp - description
-------------------
begin : Wed Jul 4 2001
copyright : (C) 2001 by Leonid Zeitlin
email : lz@europe.com
***************************************************************************/
/***************************************************************************
* *
* 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 <tdeversion.h>
#undef USE_BOLD_MENUITEM
#include "kbswitchtrayicon.h"
#include "xkeyboard.h"
#ifdef USE_BOLD_MENUITEM
#include "boldmenuitem.h"
#endif
#include <tdepopupmenu.h>
#if TDE_VERSION_MAJOR >= 3
#include <kstandarddirs.h>
#else
#include <kstddirs.h>
#endif
#include <tdelocale.h>
#include <kstdaction.h>
#include <tdeaction.h>
#include <tdeaboutapplication.h>
#if TDE_VERSION_MAJOR >= 3
#include <tdeapplication.h>
#else
#include <kapp.h>
#endif
#include <kiconloader.h>
#include <kdebug.h>
#include <tdeversion.h>
#include <ntqtooltip.h>
#include <ntqstyle.h>
#include <ntqpainter.h>
#ifdef USE_BOLD_MENUITEM
static TQColor getActiveTextColor(TDEPopupMenu *menu)
{
int id = menu->insertItem("test text");
TQMenuItem *item = menu->findItem(id);
TQStyleOption styleopt = TQStyleOption(item);
TQPainter painter(menu);
TQColorGroup &cg = menu->colorGroup();
TDEApplication::style().drawControl(TQStyle::CE_PopupMenuItem, &painter, menu,
menu->contentsRect(), cg, TQStyle::Style_Enabled | TQStyle::Style_Active,
styleopt);
menu->removeItem(id);
return painter.pen().color();
}
#endif
KBSwitchTrayIcon::KBSwitchTrayIcon(KBConfig *conf){
TQPixmap pix;
#if TDE_VERSION_MAJOR >= 3
TDEActionCollection *actions = new TDEActionCollection(this);
#define ACTION_PARENT actions
#else
#define ACTION_PARENT this
#endif
m_kbconf = conf;
//TQObject::connect(conf, TQ_SIGNAL(changed()), this, TQ_SLOT(updateMenuIcons()));
TDEPopupMenu * menu = contextMenu();
addLayoutItems(menu, false);
TQObject::connect(menu, TQ_SIGNAL(activated(int)), this, TQ_SLOT(slotMenuActivated(int)));
menu->insertSeparator();
TDEAction *pref = KStdAction::preferences(this, TQ_SIGNAL(preferencesSelected()), ACTION_PARENT);
pref->plug(menu);
TDEAction *help = KStdAction::help(this, TQ_SLOT(slotHelp()), ACTION_PARENT);
help->plug(menu);
TDEAction *about = KStdAction::aboutApp(this, TQ_SLOT(slotAbout()), ACTION_PARENT);
about->plug(menu);
/*TQString path = locate("icon", "hicolor/16x16/apps/locale.png");
if (!path.isEmpty()) pix.load(path);*/
pix = kapp->iconLoader()->loadIcon("locale", TDEIcon::Small);
menu->changeTitle(menu->idAt(0), pix, i18n("Keyboard Switch"));
setAlignment(TQt::AlignHCenter | TQt::AlignCenter);
}
KBSwitchTrayIcon::~KBSwitchTrayIcon(){
}
/** No descriptions */
void KBSwitchTrayIcon::slotMenuActivated(int id){
if (id >= 0 && id < m_kbconf->groupCount()) emit groupSelected(id);
}
/** No descriptions */
void KBSwitchTrayIcon::setActiveGroup(int groupno){
int i;
TDEPopupMenu *menu = contextMenu();
for (i = 0; i < m_kbconf->groupCount(); i++)
menu->setItemChecked(i, false);
menu->setItemChecked(groupno, true);
}
/** No descriptions */
void KBSwitchTrayIcon::setToggleGroups(int group1, int group2){
int i;
bool toggling;
TDEPopupMenu *menu = contextMenu();
for (i = 0; i < m_kbconf->groupCount(); i++) {
toggling = (i == group1 || i == group2);
#ifdef USE_BOLD_MENUITEM
TQMenuItem *item = menu->findItem(i);
BoldMenuItem *bolditem = dynamic_cast<BoldMenuItem*>(item->custom());
bolditem->setBold(toggling);
#else
if (toggling)
menu->changeItem(i, m_kbconf->getGroup(i)->getName() + "*");
else menu->changeItem(i, m_kbconf->getGroup(i)->getName());
#endif
}
}
/** No descriptions */
void KBSwitchTrayIcon::mouseReleaseEvent(TQMouseEvent *event){
if (event->button() == LeftButton) {
emit clicked();
}
}
/** No descriptions */
void KBSwitchTrayIcon::slotAbout(){
TDEAboutApplication about;
about.exec();
}
/** No descriptions */
void KBSwitchTrayIcon::updateMenuIcons(){
TDEPopupMenu *menu = contextMenu();
for (int i = 0; i < m_kbconf->groupCount(); i++) {
menu->changeItem(i, m_kbconf->getGroup(i)->getPixmap(), menu->text(i));
}
}
/** No descriptions */
void KBSwitchTrayIcon::addLayoutItems(TDEPopupMenu *menu, bool clearOld) {
KBGroup *group;
int index;
#ifdef USE_BOLD_MENUITEM
TQColor active_text_color = getActiveTextColor(menu);
#endif
if (clearOld)
for (int i = 0; i < XKeyboard::MaxNumKbdGroups; i++)
if ((index = menu->indexOf(i)) >= 0) menu->removeItemAt(index);
for (int i = 0; i < m_kbconf->groupCount(); i++) {
group = m_kbconf->getGroup(i);
#ifdef USE_BOLD_MENUITEM
/* the work on BoldMenuItems suspended: see comments in boldmenuitem.h */
menu->insertItem(group->getPixmap(),
new BoldMenuItem(group->getName(), active_text_color, false), i);
#else
menu->insertItem(group->getPixmap(), group->getName(), i, i + 1);
#endif
}
}
/** No descriptions */
void KBSwitchTrayIcon::reconfigure(){
addLayoutItems(contextMenu(), true);
}
/** Update the tray icon display for the given group */
void KBSwitchTrayIcon::updateTrayIcon(int groupno){
const TQPixmap& pix = m_kbconf->getGroup(groupno)->getPixmap();
setPixmap(pix);
setActiveGroup(groupno);
TQToolTip::remove(this);
TQToolTip::add(this, m_kbconf->getGroup(groupno)->getName());
}
/** Update menu and tray icons after configuration has changed */
void KBSwitchTrayIcon::slotUpdateIcons(){
updateTrayIcon(XKeyboard::self()->getGroupNo());
updateMenuIcons();
}
/** Display help */
void KBSwitchTrayIcon::slotHelp(){
kapp->invokeHelp();
}
#include "kbswitchtrayicon.moc"