Source Code (Use browser search to find items of interest.)

Class Index

ksirc'KAPopupMenu (./kdenetwork/ksirc/kpopupmenu.h:55)

class KAPopupMenu : public QPopupMenu
{
    Q_OBJECT
public:
    KAPopupMenu ( QWidget * parent=0, const char * name=0 );
    virtual ~KAPopupMenu ();

    virtual void show();
    virtual void hide();

    static bool popVisible() { return visible; }

    virtual void activated(int id);
    virtual void clearAccel(int id);

protected slots:
  virtual void current(int id);
  virtual void updateAccel();

protected:
  virtual void keyPressEvent(QKeyEvent *);

  virtual QString keyToString(int);


private:
  int current_item;
  bool read_config;
  
  int ccount;

  bool ignoreAlt;

  static bool visible;
  static KGAccel *KGA;

};

ksirc'KAPopupMenu::KAPopupMenu() (./kdenetwork/ksirc/kpopupmenu.cpp:100)

KAPopupMenu::KAPopupMenu ( QWidget * parent, const char * name ) /*FOLD00*/
    : QPopupMenu(parent, name)
{
  connect(this, SIGNAL(highlighted(int)),
	  this, SLOT(current(int)));
  connect(this, SIGNAL(aboutToShow()),
          this, SLOT(updateAccel()));

  if(KGA == 0x0){
    KGA = new KGAccel();
  }
  connect(KGA, SIGNAL(updateAccel()),
          this, SLOT(updateAccel()));

  
  current_item = -99;
  read_config = false;
  ccount = -1;

  ignoreAlt = false;
  
}


ksirc'KAPopupMenu::~KAPopupMenu() (./kdenetwork/ksirc/kpopupmenu.cpp:123)

KAPopupMenu::~KAPopupMenu() /*fold00*/
{
    KGA->clearAccelForPopup(this);
}


ksirc'KAPopupMenu::show() (./kdenetwork/ksirc/kpopupmenu.cpp:128)

void KAPopupMenu::show(){ /*fold00*/
  visible = true;
  QPopupMenu::show();
}


ksirc'KAPopupMenu::hide() (./kdenetwork/ksirc/kpopupmenu.cpp:133)

void KAPopupMenu::hide(){ /*fold00*/
  visible = false;
  QPopupMenu::hide();
}


ksirc'KAPopupMenu::current() (./kdenetwork/ksirc/kpopupmenu.cpp:138)

void KAPopupMenu::current(int item) /*fold00*/
{
  current_item = item;
}


ksirc'KAPopupMenu::keyPressEvent() (./kdenetwork/ksirc/kpopupmenu.cpp:143)

void KAPopupMenu::keyPressEvent(QKeyEvent *e) /*fold00*/
{
  if(e->state() & ControlButton | e->state() & AltButton){
    e->accept();
    int accel_key = CTRL + e->key();
    QString text_id = text(current_item);
    int spaces = text_id.find("\t"); // Search for accel key starts
    if(spaces != -1)
      text_id.truncate(spaces); // and remove it

    debug("Inserted: %d", accel_key);
    setAccel(0x0, current_item);
    KGA->insertAccel(accel_key, current_item, this);
    
    changeItem(text_id +  "\t" + keyToString(accel_key), current_item);
    
    setActiveItem(0);
    setActiveItem(current_item);

    if(accel_key == CTRL + Key_Alt){     // Remove the accelerator
      KGA->removeAccel(accel_key);
      accel_key = -1;                   // Write -1 to config so it ignores it
    }

    KConfig *cnf = kapp->config();
    cnf->setGroup("UserDefinedAccel");
    QString key_id = text_id + "_" + name("NoName");
    cnf->writeEntry(key_id, accel_key);

    if(e->state() & AltButton)
        ignoreAlt = true;
    
  }
  else{
    QPopupMenu::keyPressEvent(e);
  }
}


ksirc'KAPopupMenu::updateAccel() (./kdenetwork/ksirc/kpopupmenu.cpp:181)

void KAPopupMenu::updateAccel() /*fold00*/
{
  if(read_config == false){
    KConfig *cnf = kapp->config();
    cnf->setGroup("UserDefinedAccel");

    for(unsigned int i = 0; i < count(); i++){
      int item = idAt(i);
      QString text_id = text(item);
      int spaces = text_id.find("\t"); // Search for accel key starts
      if(spaces != -1)
	text_id.truncate(spaces); // and remove it
      QString key_id = text_id + "_" + name("NoName");
      int key = cnf->readNumEntry(key_id, -1);
      if(key != -1){
	KGA->insertAccel(key, item, this);
        text_id += "\t" + keyToString(key);
        setAccel(0x0, item);
	changeItem(text_id, item);
      }
    }

    
    read_config = true;
  }
}


ksirc'KAPopupMenu::activated() (./kdenetwork/ksirc/kpopupmenu.cpp:208)

void KAPopupMenu::activated(int id) /*FOLD00*/
{
  QMenuItem *mi = findItem(id);
  if(mi != 0x0 && mi->signal() != 0x0)
      mi->signal()->activate();
  else
      warning("Could not activate slot!");

  debug("Got id: %d and QMenuItem: %p", id, mi);
}


ksirc'KAPopupMenu::clearAccel() (./kdenetwork/ksirc/kpopupmenu.cpp:219)

void KAPopupMenu::clearAccel(int id) /*fold00*/
{
  QString other = text(id);
  int strip = other.find("\t");
  if(strip != -1)
    other.truncate(strip);
  changeItem(other, id);
}



ksirc'KAPopupMenu::keyToString() (./kdenetwork/ksirc/kpopupmenu.cpp:229)

QString KAPopupMenu::keyToString(int key) /*fold00*/
{
  static QIntDict<char> *ktos = 0x0;
  if(ktos == 0x0){
    ktos = new QIntDict<char>;
    ktos->insert(0x1000, "Escape");
    ktos->insert(0x1001, "Tab");
    ktos->insert(0x1002, "Backtab");
    ktos->insert(0x1003, "Backspace");
    ktos->insert(0x1004, "Return");
    ktos->insert(0x1005, "Enter");
    ktos->insert(0x1006, "Insert");
    ktos->insert(0x1007, "Delete");
    ktos->insert(0x1008, "Pause");
    ktos->insert(0x1009, "Print");
    ktos->insert(0x100a, "SysReq");
    ktos->insert(0x1010, "Home");
    ktos->insert(0x1011, "End");
    ktos->insert(0x1012, "Left");
    ktos->insert(0x1013, "Up");
    ktos->insert(0x1014, "Right");
    ktos->insert(0x1015, "Down");
    ktos->insert(0x1016, "Prior");
    ktos->insert(Key_Prior, "PageUp");
    ktos->insert(0x1017, "Next");
    ktos->insert(Key_Next, "PageDown");
    ktos->insert(0x1020, "Shift");
    ktos->insert(0x1021, "Control");
    ktos->insert(0x1022, "Meta");
    ktos->insert(0x1023, "Alt");
    ktos->insert(0x1024, "CapsLock");
    ktos->insert(0x1025, "NumLock");
    ktos->insert(0x1026, "ScrollLock");
    ktos->insert(0x1030, "F1");
    ktos->insert(0x1031, "F2");
    ktos->insert(0x1032, "F3");
    ktos->insert(0x1033, "F4");
    ktos->insert(0x1034, "F5");
    ktos->insert(0x1035, "F6");
    ktos->insert(0x1036, "F7");
    ktos->insert(0x1037, "F8");
    ktos->insert(0x1038, "F9");
    ktos->insert(0x1039, "F10");
    ktos->insert(0x103a, "F11");
    ktos->insert(0x103b, "F12");
    ktos->insert(0x103c, "F13");
    ktos->insert(0x103d, "F14");
    ktos->insert(0x103e, "F15");
    ktos->insert(0x103f, "F16");
    ktos->insert(0x1040, "F17");
    ktos->insert(0x1041, "F18");
    ktos->insert(0x1042, "F19");
    ktos->insert(0x1043, "F20");
    ktos->insert(0x1044, "F21");
    ktos->insert(0x1045, "F22");
    ktos->insert(0x1046, "F23");
    ktos->insert(0x1047, "F24");
    ktos->insert(0x1048, "F25");
    ktos->insert(0x1049, "F26");
    ktos->insert(0x104a, "F27");
    ktos->insert(0x104b, "F28");
    ktos->insert(0x104c, "F29");
    ktos->insert(0x104d, "F30");
    ktos->insert(0x104e, "F31");
    ktos->insert(0x104f, "F32");
    ktos->insert(0x1050, "F33");
    ktos->insert(0x1051, "F34");
    ktos->insert(0x1052, "F35");
    ktos->insert(0x1053, "Super");
    ktos->insert(0x1054, "Super");
    ktos->insert(0x1055, "Menu");
    ktos->insert(0x20, "Space");
    ktos->insert(0x21, "Exclam");
    ktos->insert(0x22, "QuoteDbl");
    ktos->insert(0x23, "NumberSign");
    ktos->insert(0x24, "Dollar");
    ktos->insert(0x25, "Percent");
    ktos->insert(0x26, "Ampersand");
    ktos->insert(0x27, "Apostrophe");
    ktos->insert(0x28, "ParenLeft");
    ktos->insert(0x29, "ParenRight");
    ktos->insert(0x2a, "Asterisk");
    ktos->insert(0x2b, "Plus");
    ktos->insert(0x2c, "Comma");
    ktos->insert(0x2d, "Minus");
    ktos->insert(0x2e, "Period");
    ktos->insert(0x2f, "Slash");
    ktos->insert(0x30, "0");
    ktos->insert(0x31, "1");
    ktos->insert(0x32, "2");
    ktos->insert(0x33, "3");
    ktos->insert(0x34, "4");
    ktos->insert(0x35, "5");
    ktos->insert(0x36, "6");
    ktos->insert(0x37, "7");
    ktos->insert(0x38, "8");
    ktos->insert(0x39, "9");
    ktos->insert(0x3a, "Colon");
    ktos->insert(0x3b, "Semicolon");
    ktos->insert(0x3c, "Less");
    ktos->insert(0x3d, "Equal");
    ktos->insert(0x3e, "Greater");
    ktos->insert(0x3f, "Question");
    ktos->insert(0x40, "At");
    ktos->insert(0x41, "A");
    ktos->insert(0x42, "B");
    ktos->insert(0x43, "C");
    ktos->insert(0x44, "D");
    ktos->insert(0x45, "E");
    ktos->insert(0x46, "F");
    ktos->insert(0x47, "G");
    ktos->insert(0x48, "H");
    ktos->insert(0x49, "I");
    ktos->insert(0x4a, "J");
    ktos->insert(0x4b, "K");
    ktos->insert(0x4c, "L");
    ktos->insert(0x4d, "M");
    ktos->insert(0x4e, "N");
    ktos->insert(0x4f, "O");
    ktos->insert(0x50, "P");
    ktos->insert(0x51, "Q");
    ktos->insert(0x52, "R");
    ktos->insert(0x53, "S");
    ktos->insert(0x54, "T");
    ktos->insert(0x55, "U");
    ktos->insert(0x56, "V");
    ktos->insert(0x57, "W");
    ktos->insert(0x58, "X");
    ktos->insert(0x59, "Y");
    ktos->insert(0x5a, "Z");
    ktos->insert(0x5b, "BracketLeft");
    ktos->insert(0x5c, "Backslash");
    ktos->insert(0x5d, "BracketRight");
    ktos->insert(0x5e, "AsciiCircum");
    ktos->insert(0x5f, "Underscore");
    ktos->insert(0x60, "QuoteLeft");
    ktos->insert(0x7b, "BraceLeft");
    ktos->insert(0x7c, "Bar");
    ktos->insert(0x7d, "BraceRight");
    ktos->insert(0x7e, "AsciiTilde");
  }

  QString string;

  if(key & CTRL){
    string += "Ctrl+";
    key -= CTRL;
  }
  if(key & ALT){
    string += "Alt+";
    key -= ALT;
  }
  if(key & SHIFT){
    string += "Shift+";
    key -= SHIFT;
  }

  if(ktos->find(key)){
    string += ktos->find(key);
    return string;
  }
  else{
    string.sprintf("%s<%d?>", string.data(), key);
    // string += "<" + QString(key) + "?" + ">";
    return string;
  }
}