Changeset 4856

Show
Ignore:
Timestamp:
02/06/07 05:01:10 (22 months ago)
Author:
flynd
Message:

Changed the status menu to use Qt4 without Qt3 compability classes.

Location:
branches/qt-gui_qt4/src
Files:
2 modified

Legend:

Unmodified
Added
Removed
  • branches/qt-gui_qt4/src/mainwin.cpp

    r4848 r4856  
    799799   if (o != NULL) 
    800800   { 
    801     mnuPFM->setItemChecked(o->PhoneFollowMeStatus(), true); 
     801    if (mapPFMActions.contains(o->PhoneFollowMeStatus())) 
     802      mapPFMActions[o->PhoneFollowMeStatus()]->setChecked(true); 
    802803    gUserManager.DropOwner(); 
    803804   } 
     
    851852      if (m_nAutoLogon >= 10) 
    852853      { 
    853         mnuStatus->setItemChecked(ICQ_STATUS_FxPRIVATE, true); 
     854      mapStatusActions[ICQ_STATUS_FxPRIVATE]->setChecked(true); 
    854855 
    855856        // Check the protocol status menu items as well 
     
    857858        unsigned long nAt = 0; 
    858859        for (iter = m_lnProtMenu.begin(); iter != m_lnProtMenu.end(); ++iter, nAt++) 
    859           mnuProtocolStatus[nAt]->setItemChecked(CHANGE_STATUS_PRV, true); 
     860        mapProtocolStatusActions[CHANGE_STATUS_PRV | (nAt << 8)]->setChecked(true); 
    860861      } 
    861862 
     
    21352136    { 
    21362137      if (status != ICQ_STATUS_OFFLINE) 
    2137         mnuProtocolStatus[nAt]->setItemChecked(CHANGE_STATUS_PRV, 
    2138           o->StatusInvisible()); 
    2139            
    2140       mnuProtocolStatus[nAt]->setItemChecked(CHANGE_STATUS_ONLINE | (nAt << 8), 
    2141         o->Status() == ICQ_STATUS_ONLINE);  
    2142       mnuProtocolStatus[nAt]->setItemChecked(CHANGE_STATUS_AWAY | (nAt << 8), 
    2143         o->Status() == ICQ_STATUS_AWAY); 
    2144       mnuProtocolStatus[nAt]->setItemChecked(CHANGE_STATUS_NA | (nAt << 8), 
    2145         o->Status() == ICQ_STATUS_NA); 
    2146       mnuProtocolStatus[nAt]->setItemChecked(CHANGE_STATUS_OCC | (nAt << 8), 
    2147         o->Status() == ICQ_STATUS_OCCUPIED); 
    2148       mnuProtocolStatus[nAt]->setItemChecked(CHANGE_STATUS_DND | (nAt << 8), 
    2149         o->Status() == ICQ_STATUS_DND); 
    2150       mnuProtocolStatus[nAt]->setItemChecked(CHANGE_STATUS_FFC | (nAt << 8), 
    2151         o->Status() == ICQ_STATUS_FREEFORCHAT); 
    2152       mnuProtocolStatus[nAt]->setItemChecked(CHANGE_STATUS_OFFLINE | (nAt << 8), 
    2153         o->Status() == ICQ_STATUS_OFFLINE); 
     2138      if (mapProtocolStatusActions.contains(CHANGE_STATUS_PRV | (nAt << 8))) 
     2139        mapProtocolStatusActions[CHANGE_STATUS_PRV | (nAt << 8)]->setChecked(o->StatusInvisible()); 
     2140 
     2141    if (mapProtocolStatusActions.contains(CHANGE_STATUS_ONLINE | (nAt << 8))) 
     2142      mapProtocolStatusActions[CHANGE_STATUS_ONLINE | (nAt << 8)]->setChecked(o->Status() == ICQ_STATUS_ONLINE); 
     2143 
     2144    if (mapProtocolStatusActions.contains(CHANGE_STATUS_AWAY | (nAt << 8))) 
     2145      mapProtocolStatusActions[CHANGE_STATUS_AWAY | (nAt << 8)]->setChecked(o->Status() == ICQ_STATUS_AWAY); 
     2146 
     2147    if (mapProtocolStatusActions.contains(CHANGE_STATUS_NA | (nAt << 8))) 
     2148      mapProtocolStatusActions[CHANGE_STATUS_NA | (nAt << 8)]->setChecked(o->Status() == ICQ_STATUS_NA); 
     2149 
     2150    if (mapProtocolStatusActions.contains(CHANGE_STATUS_OCC | (nAt << 8))) 
     2151      mapProtocolStatusActions[CHANGE_STATUS_OCC | (nAt << 8)]->setChecked(o->Status() == ICQ_STATUS_OCCUPIED); 
     2152 
     2153    if (mapProtocolStatusActions.contains(CHANGE_STATUS_DND | (nAt << 8))) 
     2154      mapProtocolStatusActions[CHANGE_STATUS_DND | (nAt << 8)]->setChecked(o->Status() == ICQ_STATUS_DND); 
     2155 
     2156    if (mapProtocolStatusActions.contains(CHANGE_STATUS_FFC | (nAt << 8))) 
     2157      mapProtocolStatusActions[CHANGE_STATUS_FFC | (nAt << 8)]->setChecked(o->Status() == ICQ_STATUS_FREEFORCHAT); 
     2158 
     2159    if (mapProtocolStatusActions.contains(CHANGE_STATUS_OFFLINE | (nAt << 8))) 
     2160      mapProtocolStatusActions[CHANGE_STATUS_OFFLINE | (nAt << 8)]->setChecked(o->Status() == ICQ_STATUS_OFFLINE); 
    21542161    } 
    21552162 
     
    22682275 
    22692276//----CMainWindow::changeStatusManual------------------------------------------- 
    2270 void CMainWindow::changeStatusManualProtocol(int id) 
    2271 { 
     2277void CMainWindow::changeStatusManualProtocol() 
     2278{ 
     2279  QAction *a = qobject_cast<QAction *>(sender()); 
     2280  if (a == 0) 
     2281    return; 
     2282 
     2283  int id = a->data().toUInt(); 
     2284 
    22722285  int nAt = (id & 0xFF00) >> 8; 
    22732286  int nPPID = m_lnProtMenu[nAt]; 
     
    22992312 
    23002313//----CMainWindow::changeStatusManual------------------------------------------- 
    2301 void CMainWindow::changeStatusManual(int id) 
    2302 { 
     2314void CMainWindow::changeStatusManual() 
     2315{ 
     2316  QAction *a = qobject_cast<QAction *>(sender()); 
     2317  if (a == 0) 
     2318    return; 
     2319 
     2320  int id = a->data().toUInt(); 
     2321 
    23032322  if (id != ICQ_STATUS_OFFLINE && (id & 0xFF) != ICQ_STATUS_ONLINE) 
    23042323    showAwayMsgDlg(id, true); 
     
    23192338  if (_bAutoLogon) 
    23202339  { 
    2321     if (_nPPID == 0xFFFFFFFF && mnuStatus->isItemChecked(ICQ_STATUS_FxPRIVATE))  
     2340    if (_nPPID == 0xFFFFFFFF && mapStatusActions[ICQ_STATUS_FxPRIVATE]->isChecked()) 
    23222341    { 
    23232342      newStatus |= ICQ_STATUS_FxPRIVATE; 
     
    23272346  else if (_nPPID == 0xFFFFFFFF && id == int(ICQ_STATUS_FxPRIVATE)) 
    23282347  { 
    2329     bAllInvis = !mnuStatus->isItemChecked(ICQ_STATUS_FxPRIVATE); 
    2330     mnuStatus->setItemChecked(ICQ_STATUS_FxPRIVATE, bAllInvis); 
     2348    bAllInvis = !mapStatusActions[ICQ_STATUS_FxPRIVATE]->isChecked(); 
     2349    mapStatusActions[ICQ_STATUS_FxPRIVATE]->setChecked(bAllInvis); 
    23312350  } 
    23322351 
     
    23502369    } 
    23512370 
    2352     QMenu *pMenu; 
    2353     int nInvisibleLocation; 
     2371    QAction* actInvisible; 
    23542372    if (bLicqOnly) 
    23552373    { 
    2356       nInvisibleLocation = ICQ_STATUS_FxPRIVATE; 
    2357       pMenu = mnuStatus; 
     2374      actInvisible = mapStatusActions[ICQ_STATUS_FxPRIVATE]; 
    23582375    } 
    23592376    else 
    23602377    { 
    2361       nInvisibleLocation = (CHANGE_STATUS_PRV | nAt << 8); 
    2362       pMenu = mnuProtocolStatus[nAt]; 
     2378      actInvisible = mapProtocolStatusActions[CHANGE_STATUS_PRV | nAt << 8]; 
    23632379    } 
    23642380         
     
    23752391    {     
    23762392      if (_nPPID == 0xFFFFFFFF) 
    2377        pMenu->setItemChecked(nInvisibleLocation, bAllInvis); 
     2393        actInvisible->setChecked(bAllInvis); 
    23782394      else 
    2379         pMenu->setItemChecked(nInvisibleLocation, 
    2380           !pMenu->isItemChecked(nInvisibleLocation)); 
    2381            
     2395        actInvisible->toggle(); 
     2396 
    23822397      if (o->StatusOffline()) 
    23832398      { 
     
    23862401      } 
    23872402 
    2388       if (pMenu->isItemChecked(nInvisibleLocation)) 
     2403      if (actInvisible->isChecked()) 
    23892404        newStatus = o->StatusFull() | ICQ_STATUS_FxPRIVATE; 
    23902405      else 
     
    23942409    { 
    23952410      newStatus = id; 
    2396       if (pMenu->isItemChecked(nInvisibleLocation)) 
     2411      if (actInvisible->isChecked()) 
    23972412        newStatus |= ICQ_STATUS_FxPRIVATE; 
    23982413    } 
     
    24032418      newStatus |= ICQ_STATUS_FxPRIVATE; 
    24042419      if (nAt != -1) 
    2405         mnuProtocolStatus[nAt]->setItemChecked(nInvisibleLocation, true); 
     2420        actInvisible->setChecked(true); 
    24062421    } 
    24072422       
     
    24212436 
    24222437//----CMainWindow::changeStatus------------------------------------------------- 
    2423 void CMainWindow::changePFMStatus(int id) 
    2424 { 
     2438 
     2439void CMainWindow::changePFMStatus() 
     2440{ 
     2441  QAction *a = qobject_cast<QAction *>(sender()); 
     2442  if (a == 0) 
     2443    return; 
     2444 
     2445  int id = a->data().toUInt(); 
     2446 
    24252447  licqDaemon->icqSetPhoneFollowMeStatus(id); 
    2426   for (unsigned int i = 0; i < mnuPFM->count(); i++) 
    2427     mnuPFM->setItemChecked(mnuPFM->idAt(i), false); 
    2428   mnuPFM->setItemChecked(id, true); 
    24292448} 
    24302449 
     
    31083127  FOR_EACH_PROTO_USER_END 
    31093128 
     3129  QAction *a; 
     3130 
    31103131  // Menu item for the status of this protocol 
    31113132  if (m_nProtoNum == 0) 
    31123133  { 
    31133134    // Add ICQ status menu 
    3114     mnuProtocolStatus[m_nProtoNum] = new QMenu(NULL); 
    3115     mnuProtocolStatus[m_nProtoNum]->insertItem(QIcon(pmOnline), tr("&Online"), 
    3116       CHANGE_STATUS_ONLINE); 
    3117     mnuProtocolStatus[m_nProtoNum]->insertItem(QIcon(pmAway), tr("&Away"), 
    3118       CHANGE_STATUS_AWAY); 
    3119     mnuProtocolStatus[m_nProtoNum]->insertItem(QIcon(pmNa), tr("&Not Available"), 
    3120       CHANGE_STATUS_NA); 
    3121     mnuProtocolStatus[m_nProtoNum]->insertItem(QIcon(pmOccupied), tr("O&ccupied"), 
    3122       CHANGE_STATUS_OCC); 
    3123     mnuProtocolStatus[m_nProtoNum]->insertItem(QIcon(pmDnd), tr("&Do Not Disturb"), 
    3124       CHANGE_STATUS_DND); 
    3125     mnuProtocolStatus[m_nProtoNum]->insertItem(QIcon(pmFFC), tr("Free for C&hat"), 
    3126       CHANGE_STATUS_FFC); 
    3127     mnuProtocolStatus[m_nProtoNum]->insertItem(QIcon(pmOffline), tr("O&ffline"), 
    3128       CHANGE_STATUS_OFFLINE); 
    3129     mnuProtocolStatus[m_nProtoNum]->insertSeparator(); 
    3130     mnuProtocolStatus[m_nProtoNum]->insertItem(QIcon(pmPrivate), tr("&Invisible"), 
    3131       CHANGE_STATUS_PRV); 
    3132     mnuStatus->insertItem("ICQ", mnuProtocolStatus[m_nProtoNum], -1, m_nProtoNum); 
    3133     connect(mnuProtocolStatus[m_nProtoNum], SIGNAL(activated(int)), 
    3134       this, SLOT(changeStatusManualProtocol(int))); 
     3135    mnuProtocolStatus[0] = new QMenu("ICQ"); 
     3136    mnuStatusSeparator->setVisible(true); 
     3137    mnuStatus->insertMenu(mnuStatusSeparator, mnuProtocolStatus[0]); 
     3138 
     3139    a = mnuProtocolStatus[0]->addAction(QIcon(pmOnline), tr("&Online"), this, SLOT(changeStatusManualProtocol())); 
     3140    a->setCheckable(true); 
     3141    a->setData(static_cast<int>(CHANGE_STATUS_ONLINE)); 
     3142    mapProtocolStatusActions[CHANGE_STATUS_ONLINE] = a; 
     3143 
     3144    a = mnuProtocolStatus[0]->addAction(QIcon(pmAway), tr("&Away"), this, SLOT(changeStatusManualProtocol())); 
     3145    a->setCheckable(true); 
     3146    a->setData(static_cast<int>(CHANGE_STATUS_AWAY)); 
     3147    mapProtocolStatusActions[CHANGE_STATUS_AWAY] = a; 
     3148 
     3149    a = mnuProtocolStatus[0]->addAction(QIcon(pmNa), tr("&Not Available"), this, SLOT(changeStatusManualProtocol())); 
     3150    a->setCheckable(true); 
     3151    a->setData(static_cast<int>(CHANGE_STATUS_NA)); 
     3152    mapProtocolStatusActions[CHANGE_STATUS_NA] = a; 
     3153 
     3154    a = mnuProtocolStatus[0]->addAction(QIcon(pmOccupied), tr("O&ccupied"), this, SLOT(changeStatusManualProtocol())); 
     3155    a->setCheckable(true); 
     3156    a->setData(static_cast<int>(CHANGE_STATUS_OCC)); 
     3157    mapProtocolStatusActions[CHANGE_STATUS_OCC] = a; 
     3158 
     3159    a = mnuProtocolStatus[0]->addAction(QIcon(pmDnd), tr("&Do Not Disturb"), this, SLOT(changeStatusManualProtocol())); 
     3160    a->setCheckable(true); 
     3161    a->setData(static_cast<int>(CHANGE_STATUS_DND)); 
     3162    mapProtocolStatusActions[CHANGE_STATUS_DND] = a; 
     3163 
     3164    a = mnuProtocolStatus[0]->addAction(QIcon(pmFFC), tr("Free for C&hat"), this, SLOT(changeStatusManualProtocol())); 
     3165    a->setCheckable(true); 
     3166    a->setData(static_cast<int>(CHANGE_STATUS_FFC)); 
     3167    mapProtocolStatusActions[CHANGE_STATUS_FFC] = a; 
     3168 
     3169    a = mnuProtocolStatus[0]->addAction(QIcon(pmOffline), tr("O&ffline"), this, SLOT(changeStatusManualProtocol())); 
     3170    a->setCheckable(true); 
     3171    a->setData(static_cast<int>(CHANGE_STATUS_OFFLINE)); 
     3172    mapProtocolStatusActions[CHANGE_STATUS_OFFLINE] = a; 
     3173 
     3174    mnuProtocolStatus[0]->addSeparator(); 
     3175 
     3176    a = mnuProtocolStatus[0]->addAction(QIcon(pmPrivate), tr("&Invisible"), this, SLOT(changeStatusManualProtocol())); 
     3177    a->setCheckable(true); 
     3178    a->setData(static_cast<int>(CHANGE_STATUS_PRV)); 
     3179    mapProtocolStatusActions[CHANGE_STATUS_PRV] = a; 
     3180 
    31353181    m_lnProtMenu.push_back(LICQ_PPID); 
    3136      
     3182 
    31373183    // System functions menu 
    31383184    mnuOwnerAdm->removeItemAt(2); 
     
    31483194    m_nProtoNum++; 
    31493195  } 
    3150   else 
    3151       mnuStatus->removeItemAt(m_nProtoNum+1); // Move separator 
    3152  
    3153     
     3196 
     3197 
    31543198  // Temp pointers that if they are not null, will be in the menu      
    31553199  QPixmap *pOnline, *pAway, *pNA, *pOcc,*pDND, *pFFC, *pOffline, *pPrivate; 
     
    31693213   
    31703214  // Create the menu items now 
    3171   mnuProtocolStatus[m_nProtoNum] = new QMenu(NULL); 
     3215  mnuProtocolStatus[m_nProtoNum] = new QMenu(pName ? pName : "(No Name)"); 
     3216  mnuStatus->insertMenu(mnuStatusSeparator, mnuProtocolStatus[m_nProtoNum]); 
     3217 
    31723218  if (pOnline) 
    3173     mnuProtocolStatus[m_nProtoNum]->insertItem(QIcon(*pOnline), tr("&Online"), 
    3174       CHANGE_STATUS_ONLINE | (m_nProtoNum << 8)); 
     3219  { 
     3220    a = mnuProtocolStatus[m_nProtoNum]->addAction(QIcon(*pOnline), tr("&Online"), this, SLOT(changeStatusManualProtocol())); 
     3221    a->setCheckable(true); 
     3222    a->setData(static_cast<int>(CHANGE_STATUS_ONLINE | (m_nProtoNum << 8))); 
     3223    mapProtocolStatusActions[CHANGE_STATUS_ONLINE | (m_nProtoNum << 8)] = a; 
     3224  } 
    31753225  if (pAway) 
    3176     mnuProtocolStatus[m_nProtoNum]->insertItem(QIcon(*pAway), tr("&Away"), 
    3177       CHANGE_STATUS_AWAY | (m_nProtoNum << 8)); 
     3226  { 
     3227    a = mnuProtocolStatus[m_nProtoNum]->addAction(QIcon(*pAway), tr("&Away"), this, SLOT(changeStatusManualProtocol())); 
     3228    a->setCheckable(true); 
     3229    a->setData(static_cast<int>(CHANGE_STATUS_AWAY | (m_nProtoNum << 8))); 
     3230    mapProtocolStatusActions[CHANGE_STATUS_AWAY | (m_nProtoNum << 8)] = a; 
     3231  } 
    31783232  if (pNA) 
    3179     mnuProtocolStatus[m_nProtoNum]->insertItem(QIcon(*pNA), tr("&Not Available"), 
    3180       CHANGE_STATUS_NA | (m_nProtoNum << 8)); 
     3233  { 
     3234    a = mnuProtocolStatus[m_nProtoNum]->addAction(QIcon(*pNA), tr("&Not Available"), this, SLOT(changeStatusManualProtocol())); 
     3235    a->setCheckable(true); 
     3236    a->setData(static_cast<int>(CHANGE_STATUS_NA | (m_nProtoNum << 8))); 
     3237    mapProtocolStatusActions[CHANGE_STATUS_NA | (m_nProtoNum << 8)] = a; 
     3238  } 
    31813239  if (pOcc) 
    3182     mnuProtocolStatus[m_nProtoNum]->insertItem(QIcon(*pOcc), tr("O&ccupied"), 
    3183       CHANGE_STATUS_OCC | (m_nProtoNum << 8)); 
     3240  { 
     3241    a = mnuProtocolStatus[m_nProtoNum]->addAction(QIcon(*pOcc), tr("O&ccupied"), this, SLOT(changeStatusManualProtocol())); 
     3242    a->setCheckable(true); 
     3243    a->setData(static_cast<int>(CHANGE_STATUS_OCC | (m_nProtoNum << 8))); 
     3244    mapProtocolStatusActions[CHANGE_STATUS_OCC | (m_nProtoNum << 8)] = a; 
     3245  } 
    31843246  if (pDND) 
    3185     mnuProtocolStatus[m_nProtoNum]->insertItem(QIcon(*pDND), tr("&Do Not Disturb"), 
    3186       CHANGE_STATUS_DND | (m_nProtoNum << 8)); 
     3247  { 
     3248    a = mnuProtocolStatus[m_nProtoNum]->addAction(QIcon(*pDND), tr("&Do Not Disturb"), this, SLOT(changeStatusManualProtocol())); 
     3249    a->setCheckable(true); 
     3250    a->setData(static_cast<int>(CHANGE_STATUS_DND | (m_nProtoNum << 8))); 
     3251    mapProtocolStatusActions[CHANGE_STATUS_DND | (m_nProtoNum << 8)] = a; 
     3252  } 
    31873253  if (pFFC) 
    3188     mnuProtocolStatus[m_nProtoNum]->insertItem(QIcon(*pFFC), tr("Free for C&hat"), 
    3189       CHANGE_STATUS_FFC | (m_nProtoNum << 8)); 
     3254  { 
     3255    a = mnuProtocolStatus[m_nProtoNum]->addAction(QIcon(*pFFC), tr("Free for C&hat"), this, SLOT(changeStatusManualProtocol())); 
     3256    a->setCheckable(true); 
     3257    a->setData(static_cast<int>(CHANGE_STATUS_FFC | (m_nProtoNum << 8))); 
     3258    mapProtocolStatusActions[CHANGE_STATUS_FFC | (m_nProtoNum << 8)] = a; 
     3259  } 
    31903260  if (pOffline) 
    3191     mnuProtocolStatus[m_nProtoNum]->insertItem(QIcon(*pOffline), tr("O&ffline"), 
    3192       CHANGE_STATUS_OFFLINE | (m_nProtoNum << 8)); 
     3261  { 
     3262    a = mnuProtocolStatus[m_nProtoNum]->addAction(QIcon(*pOffline), tr("O&ffline"), this, SLOT(changeStatusManualProtocol())); 
     3263    a->setCheckable(true); 
     3264    a->setData(static_cast<int>(CHANGE_STATUS_OFFLINE | (m_nProtoNum << 8))); 
     3265    mapProtocolStatusActions[CHANGE_STATUS_OFFLINE | (m_nProtoNum << 8)] = a; 
     3266  } 
    31933267  if (pPrivate) 
    31943268  { 
    3195     mnuProtocolStatus[m_nProtoNum]->insertSeparator(); 
    3196     mnuProtocolStatus[m_nProtoNum]->insertItem(QIcon(*pPrivate), tr("&Invisible"), 
    3197       CHANGE_STATUS_PRV | (m_nProtoNum << 8)); 
    3198   } 
    3199   mnuStatus->insertItem(pName ? pName : "(No Name)", 
    3200     mnuProtocolStatus[m_nProtoNum], -1, m_nProtoNum); 
    3201   mnuStatus->insertSeparator(m_nProtoNum + 1); 
    3202   //Connect to emit a different signal.  One that will give the PPID and 
    3203   //status to change to one slot. 
    3204   connect(mnuProtocolStatus[m_nProtoNum], SIGNAL(activated(int)), 
    3205     this, SLOT(changeStatusManualProtocol(int))); 
     3269    mnuProtocolStatus[m_nProtoNum]->addSeparator(); 
     3270 
     3271    a = mnuProtocolStatus[m_nProtoNum]->addAction(QIcon(*pPrivate), tr("&Invisible"), this, SLOT(changeStatusManualProtocol())); 
     3272    a->setCheckable(true); 
     3273    a->setData(static_cast<int>(CHANGE_STATUS_PRV | (m_nProtoNum << 8))); 
     3274    mapProtocolStatusActions[CHANGE_STATUS_PRV | (m_nProtoNum << 8)] = a; 
     3275  } 
     3276 
    32063277  m_lnProtMenu.push_back(nPPID); 
    3207    
     3278 
    32083279  // Create the system functions now 
    32093280  mnuProtocolOwnerAdm[m_nProtoNum] = new QMenu(NULL); 
     
    44294500void CMainWindow::initMenu() 
    44304501{ 
    4431    // Skins without a menubar (frame.hasMenuBar = 0) cannot use 
    4432    // QMenuData accelerators, so we need a accel that is available 
    4433    // even without a menubar: 
    4434    Q3Accel *a = new Q3Accel(this, "CMainWindow change Status Accel"); 
    4435    a->insertItem(Qt::ALT + Qt::Key_O, ICQ_STATUS_ONLINE); 
    4436    a->insertItem(Qt::ALT + Qt::Key_A, ICQ_STATUS_AWAY); 
    4437    a->insertItem(Qt::ALT + Qt::Key_N, ICQ_STATUS_NA); 
    4438    a->insertItem(Qt::ALT + Qt::Key_C, ICQ_STATUS_OCCUPIED); 
    4439    a->insertItem(Qt::ALT + Qt::Key_D, ICQ_STATUS_DND); 
    4440    a->insertItem(Qt::ALT + Qt::Key_H, ICQ_STATUS_FREEFORCHAT); 
    4441    a->insertItem(Qt::ALT + Qt::Key_F, ICQ_STATUS_OFFLINE); 
    4442    a->insertItem(Qt::ALT + Qt::Key_I, ICQ_STATUS_FxPRIVATE); 
    4443    connect(a, SIGNAL(activated(int)), this, SLOT(changeStatusManual(int))); 
    4444 #if QT_VERSION >= 0x030100 
    4445    connect(a, SIGNAL(activatedAmbiguously(int)), this, SLOT(changeStatusManual(int))); 
    4446 #endif 
    4447  
    4448    mnuStatus = new QMenu(NULL); 
    4449    mnuPFM = new QMenu(NULL); 
    4450    mnuPFM->insertItem(tr("Don't Show"), (int)ICQ_PLUGIN_STATUSxINACTIVE); 
    4451    mnuPFM->insertItem(tr("Available"), ICQ_PLUGIN_STATUSxACTIVE); 
    4452    mnuPFM->insertItem(tr("Busy"), ICQ_PLUGIN_STATUSxBUSY); 
    4453    connect(mnuPFM, SIGNAL(activated(int)), this, SLOT(changePFMStatus(int))); 
    4454    mnuStatus->insertItem(tr("Phone \"Follow Me\""), mnuPFM); 
    4455    mnuStatus->insertSeparator(); 
    4456    mnuStatus->insertItem(QIcon(pmOnline), tr("&Online"), ICQ_STATUS_ONLINE); 
    4457    mnuStatus->insertItem(QIcon(pmAway), tr("&Away"), ICQ_STATUS_AWAY); 
    4458    mnuStatus->insertItem(QIcon(pmNa), tr("&Not Available"), ICQ_STATUS_NA); 
    4459    mnuStatus->insertItem(QIcon(pmOccupied), tr("O&ccupied"), ICQ_STATUS_OCCUPIED); 
    4460    mnuStatus->insertItem(QIcon(pmDnd), tr("&Do Not Disturb"), ICQ_STATUS_DND); 
    4461    mnuStatus->insertItem(QIcon(pmFFC), tr("Free for C&hat"), ICQ_STATUS_FREEFORCHAT); 
    4462    mnuStatus->insertItem(QIcon(pmOffline), tr("O&ffline"), ICQ_STATUS_OFFLINE); 
    4463    mnuStatus->insertSeparator(); 
    4464    mnuStatus->insertItem(QIcon(pmPrivate), tr("&Invisible"), ICQ_STATUS_FxPRIVATE); 
    4465    mnuStatus->setAccel(a->key(ICQ_STATUS_ONLINE), ICQ_STATUS_ONLINE); 
    4466    mnuStatus->setAccel(a->key(ICQ_STATUS_AWAY), ICQ_STATUS_AWAY); 
    4467    mnuStatus->setAccel(a->key(ICQ_STATUS_NA), ICQ_STATUS_NA); 
    4468    mnuStatus->setAccel(a->key(ICQ_STATUS_OCCUPIED), ICQ_STATUS_OCCUPIED); 
    4469    mnuStatus->setAccel(a->key(ICQ_STATUS_DND), ICQ_STATUS_DND); 
    4470    mnuStatus->setAccel(a->key(ICQ_STATUS_FREEFORCHAT), ICQ_STATUS_FREEFORCHAT); 
    4471    mnuStatus->setAccel(a->key(ICQ_STATUS_OFFLINE), ICQ_STATUS_OFFLINE); 
    4472    mnuStatus->setAccel(a->key(ICQ_STATUS_FxPRIVATE), ICQ_STATUS_FxPRIVATE); 
    4473  
    4474    connect(mnuStatus, SIGNAL(activated(int)), this, SLOT(changeStatusManual(int))); 
     4502  mnuStatus = new QMenu(this); 
     4503  QAction *a; 
     4504 
     4505  // Start with a separator that will be below the status menu for individual protocols but hide it until it is needed 
     4506  mnuStatusSeparator = mnuStatus->addSeparator(); 
     4507  mnuStatusSeparator->setVisible(false); 
     4508 
     4509  QMenu* mnuPFM = mnuStatus->addMenu(tr("Phone \"Follow Me\"")); 
     4510  QActionGroup* agrPFM = new QActionGroup(this); 
     4511 
     4512  a = mnuPFM->addAction(tr("Don't Show"), this, SLOT(changePFMStatus())); 
     4513  a->setCheckable(true); 
     4514  a->setData(static_cast<uint>(ICQ_PLUGIN_STATUSxINACTIVE)); 
     4515  mapPFMActions[ICQ_PLUGIN_STATUSxINACTIVE] = a; 
     4516  agrPFM->addAction(a); 
     4517 
     4518  a = mnuPFM->addAction(tr("Available"), this, SLOT(changePFMStatus())); 
     4519  a->setCheckable(true); 
     4520  a->setData(static_cast<uint>(ICQ_PLUGIN_STATUSxACTIVE)); 
     4521  mapPFMActions[ICQ_PLUGIN_STATUSxACTIVE] = a; 
     4522  agrPFM->addAction(a); 
     4523 
     4524  a = mnuPFM->addAction(tr("Busy"), this, SLOT(changePFMStatus())); 
     4525  a->setCheckable(true); 
     4526  a->setData(static_cast<uint>(ICQ_PLUGIN_STATUSxBUSY)); 
     4527  mapPFMActions[ICQ_PLUGIN_STATUSxBUSY] = a; 
     4528  agrPFM->addAction(a); 
     4529 
     4530  mnuStatus->addSeparator(); 
     4531 
     4532  // Add the global statuses to the status menu 
     4533  // Adding the actions to the main window (this) allows the shortcuts to also be used when the skin has no menubar 
     4534 
     4535  a = mnuStatus->addAction(QIcon(pmOnline), tr("&Online"), this, SLOT(changeStatusManual())); 
     4536  a->setData(static_cast<uint>(ICQ_STATUS_ONLINE)); 
     4537  a->setShortcut(QKeySequence(Qt::ALT + Qt::Key_O)); 
     4538  this->addAction(a); 
     4539  mapStatusActions[ICQ_STATUS_ONLINE] = a; 
     4540 
     4541  a = mnuStatus->addAction(QIcon(pmAway), tr("&Away"), this, SLOT(changeStatusManual())); 
     4542  a->setData(static_cast<uint>(ICQ_STATUS_AWAY)); 
     4543  a->setShortcut(QKeySequence(Qt::ALT + Qt::Key_A)); 
     4544  this->addAction(a); 
     4545  mapStatusActions[ICQ_STATUS_AWAY] = a; 
     4546 
     4547  a = mnuStatus->addAction(QIcon(pmNa), tr("&Not Available"), this, SLOT(changeStatusManual())); 
     4548  a->setData(static_cast<uint>(ICQ_STATUS_NA)); 
     4549  a->setShortcut(QKeySequence(Qt::ALT + Qt::Key_N)); 
     4550  this->addAction(a); 
     4551  mapStatusActions[ICQ_STATUS_NA] = a; 
     4552 
     4553  a = mnuStatus->addAction(QIcon(pmOccupied), tr("O&ccupied"), this, SLOT(changeStatusManual())); 
     4554  a->setData(static_cast<uint>(ICQ_STATUS_OCCUPIED)); 
     4555  a->setShortcut(QKeySequence(Qt::ALT + Qt::Key_C)); 
     4556  this->addAction(a); 
     4557  mapStatusActions[ICQ_STATUS_OCCUPIED] = a; 
     4558 
     4559  a = mnuStatus->addAction(QIcon(pmDnd), tr("&Do Not Disturb"), this, SLOT(changeStatusManual())); 
     4560  a->setData(static_cast<uint>(ICQ_STATUS_DND)); 
     4561  a->setShortcut(QKeySequence(Qt::ALT + Qt::Key_D)); 
     4562  this->addAction(a); 
     4563  mapStatusActions[ICQ_STATUS_DND] = a; 
     4564 
     4565  a = mnuStatus->addAction(QIcon(pmFFC), tr("Free for C&hat"), this, SLOT(changeStatusManual())); 
     4566  a->setData(static_cast<uint>(ICQ_STATUS_FREEFORCHAT)); 
     4567  a->setShortcut(QKeySequence(Qt::ALT + Qt::Key_H)); 
     4568  this->addAction(a); 
     4569  mapStatusActions[ICQ_STATUS_FREEFORCHAT] = a; 
     4570 
     4571  a = mnuStatus->addAction(QIcon(pmOffline), tr("O&ffline"), this, SLOT(changeStatusManual())); 
     4572  a->setData(static_cast<uint>(ICQ_STATUS_OFFLINE)); 
     4573  a->setShortcut(QKeySequence(Qt::ALT + Qt::Key_F)); 
     4574  this->addAction(a); 
     4575  mapStatusActions[ICQ_STATUS_OFFLINE] = a; 
     4576 
     4577  mnuStatus->addSeparator(); 
     4578 
     4579  a = mnuStatus->addAction(QIcon(pmPrivate), tr("&Invisible"), this, SLOT(changeStatusManual())); 
     4580  a->setData(static_cast<uint>(ICQ_STATUS_FxPRIVATE)); 
     4581  a->setCheckable(true); 
     4582  a->setShortcut(QKeySequence(Qt::ALT + Qt::Key_I)); 
     4583  this->addAction(a); 
     4584  mapStatusActions[ICQ_STATUS_FxPRIVATE] = a; 
     4585 
    44754586 
    44764587   mnuUserGroups = new QMenu(NULL); 
     
    48694980  if (m_lnProtMenu.size() == 2) 
    48704981  { 
    4871     mnuStatus->removeItemAt(2); 
    4872     mnuStatus->removeItemAt(1); 
    4873     mnuStatus->removeItemAt(0); 
     4982    mnuStatus->removeAction(mnuProtocolStatus[1]->menuAction()); 
     4983    mnuStatus->removeAction(mnuProtocolStatus[0]->menuAction()); 
     4984    mnuStatusSeparator->setVisible(false); 
    48744985    m_nProtoNum = 0; 
    48754986    m_lnProtMenu.clear(); 
     
    48844995      { 
    48854996        m_lnProtMenu.erase(iter); 
    4886         mnuStatus->removeItemAt(n); 
     4997        mnuStatus->removeAction(mnuProtocolStatus[n]->menuAction()); 
    48874998        m_nProtoNum--; 
    48884999        break; 
     
    48905001      n++; 
    48915002    } 
     5003 
     5004    for ( ; n < m_nProtoNum; ++n) 
     5005      mnuProtocolStatus[n] = mnuProtocolStatus[n + 1]; 
    48925006  } 
    48935007 
  • branches/qt-gui_qt4/src/mainwin.h

    r4845 r4856  
    243243        *mnuUserAdm, 
    244244        *mnuStatus, 
    245         *mnuPFM, 
    246245        *mnuDebug, 
    247246        *mnuUtilities, 
     
    250249        *mnuProtocolStatus[16], 
    251250        *mnuProtocolOwnerAdm[16]; 
     251  QAction* mnuStatusSeparator; 
    252252  QMap<int, QAction*> mapGroupActions, 
    253                       mapServerGroupActions; 
     253                      mapServerGroupActions, 
     254                      mapStatusActions; 
     255  QMap<unsigned long, QAction*> mapPFMActions, 
     256                                mapProtocolStatusActions; 
     257 
    254258  CELabel *lblStatus, *lblMsg; 
    255259  CEButton *btnSystem; 
     
    343347  void changeStatus(int index, unsigned long nPPID = 0xFFFFFFFF, 
    344348                    bool _bAutoLogon = false); //all 
    345   void changeStatusManualProtocol(int index); 
    346   void changeStatusManual(int index); 
    347   void changePFMStatus(int index); 
     349  void changeStatusManualProtocol(); 
     350  void changeStatusManual(); 
     351  void changePFMStatus(); 
    348352  void setCurrentGroupMenu(int id); 
    349353  void setCurrentGroup(int);