Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.

chatmanager.cpp 1.1KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. #include "chatmanager.h"
  2. ChatManager::ChatManager(QObject *parent) : QObject(parent)
  3. {
  4. }
  5. ChatManager::~ChatManager()
  6. {
  7. qDeleteAll(m_dlgChat);
  8. }
  9. void ChatManager::chat(NetSoul::Users users)
  10. {
  11. foreach(NetSoul::User user, users)
  12. {
  13. DialogChat* ch = getChatWindow(user);
  14. ch->show();
  15. ch->raise();
  16. }
  17. }
  18. void ChatManager::newMessage(NetSoul::Message msg)
  19. {
  20. DialogChat* ch = getChatWindow(msg.from);
  21. ch->newMessage(msg);
  22. if(!ch->isVisible())
  23. ch->showMinimized();
  24. if(!ch->isActiveWindow())
  25. QApplication::alert(ch);
  26. }
  27. void ChatManager::setMe(NetSoul::User user)
  28. {
  29. if(user.login != m_me.login)
  30. {
  31. qDeleteAll(m_dlgChat);
  32. m_dlgChat.clear();
  33. }
  34. m_me = user;
  35. }
  36. void ChatManager::dlgChatsendMessage(NetSoul::User usr, QString msg)
  37. {
  38. emit sendMessageRequested(usr, msg);
  39. }
  40. DialogChat*ChatManager::getChatWindow(NetSoul::User user)
  41. {
  42. foreach(DialogChat* ch, m_dlgChat)
  43. if(ch->match(user))
  44. return ch;
  45. DialogChat* ch = new DialogChat();
  46. connect(ch, SIGNAL(sendMessageRequested(NetSoul::User,QString)), this, SLOT(dlgChatsendMessage(NetSoul::User,QString)));
  47. m_dlgChat.append(ch);
  48. ch->setUser(user);
  49. ch->setMe(m_me);
  50. return ch;
  51. }