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);
}