Source Code (Use browser search to find items of interest.)
Class Index
kcontrol'ModuleMenu (./kdebase/kcontrol/kcontrol/modulemenu.h:36)
class ModuleMenu : public QPopupMenu
{
Q_OBJECT;
public:
ModuleMenu(ConfigModuleList *list, QWidget * parent = 0, const char * name = 0);
signals:
void moduleActivated(ConfigModule*);
private slots:
void moduleSelected(int id);
protected:
QPopupMenu *getGroupMenu(const QStringList &groups);
private:
int id;
ConfigModuleList *_modules;
QIntDict<ConfigModule> _moduleDict;
QDict<QPopupMenu> _menuDict;
};
kcontrol'ModuleMenu::ModuleMenu() (./kdebase/kcontrol/kcontrol/modulemenu.cpp:41)
ModuleMenu::ModuleMenu(ConfigModuleList *list, QWidget * parent, const char * name)
: QPopupMenu(parent, name)
, _modules(list)
{
// use large id's to start with...
id = 10000;
ConfigModule *module;
for (module=_modules->first(); module != 0; module=_modules->next())
{
if (module->library().isEmpty())
continue;
if (!KCGlobal::types().contains(module->type()))
continue;
if (module->onlyRoot() && !KCGlobal::root())
continue;
QPopupMenu *parent = 0;
parent = getGroupMenu(module->groups());
int realid = parent->insertItem(module->smallIcon(), module->name(), id);
_moduleDict.insert(realid, module);
id++;
}
connect(this, SIGNAL(activated(int)), this, SLOT(moduleSelected(int)));
}
kcontrol'ModuleMenu::getGroupMenu() (./kdebase/kcontrol/kcontrol/modulemenu.cpp:84)
QPopupMenu *ModuleMenu::getGroupMenu(const QStringList &groups)
{
// break recursion if path is empty
if (groups.count() == 0)
return this;
// calculate path
QString path = menuPath(groups);
kdDebug() << "Path " << path << endl;
// look if menu already exists
if (_menuDict[path])
return _menuDict[path];
// find parent menu
QStringList parGroup;
for (unsigned int i=0; i<groups.count()-1; i++)
parGroup.append(groups[i]);
QPopupMenu *parent = getGroupMenu(parGroup);
// create new menu
QPopupMenu *menu = new QPopupMenu(parent);
connect(menu, SIGNAL(activated(int)), this, SLOT(moduleSelected(int)));
KDesktopFile directory(locate("apps", "Settings/"+path+".directory"));
QString defName = path.left(path.length()-1);
int pos = defName.findRev('/');
if (pos >= 0)
defName = defName.mid(pos+1);
parent->insertItem(SmallIcon(directory.readEntry("Icon")), directory.readEntry("Name", defName), menu);
_menuDict.insert(path, menu);
return menu;
}
kcontrol'ModuleMenu::moduleSelected() (./kdebase/kcontrol/kcontrol/modulemenu.cpp:120)
void ModuleMenu::moduleSelected(int id)
{
kdDebug() << "Item " << id << " selected" << endl;
ConfigModule *module = _moduleDict[id];
if (module)
emit moduleActivated(module);
}