QTfrontend/ui/widget/chatwidget.cpp
changeset 7737 ff63da8a3202
parent 7725 4ad05a478c6c
child 7740 076f57836ee3
equal deleted inserted replaced
7736:1cf84a84ef43 7737:ff63da8a3202
    33 #include <QStringList>
    33 #include <QStringList>
    34 #include <QDateTime>
    34 #include <QDateTime>
    35 #include <QTime>
    35 #include <QTime>
    36 #include <QPainter>
    36 #include <QPainter>
    37 #include <QListView>
    37 #include <QListView>
    38 
       
    39 #include <QMessageBox>
    38 #include <QMessageBox>
    40 
    39 #include <QModelIndexList>
       
    40 #include <QDebug>
       
    41 #include <QSortFilterProxyModel>
    41 
    42 
    42 #include "DataManager.h"
    43 #include "DataManager.h"
    43 #include "hwconsts.h"
    44 #include "hwconsts.h"
    44 #include "gameuiconfig.h"
    45 #include "gameuiconfig.h"
       
    46 #include "playerslistmodel.h"
    45 
    47 
    46 #include "chatwidget.h"
    48 #include "chatwidget.h"
    47 
    49 
    48 
    50 
    49 ListWidgetNickItem::ListWidgetNickItem(const QString& nick, bool isFriend, bool isIgnored) : QListWidgetItem(nick)
    51 ListWidgetNickItem::ListWidgetNickItem(const QString& nick, bool isFriend, bool isIgnored) : QListWidgetItem(nick)
   782     }
   784     }
   783 }
   785 }
   784 
   786 
   785 void HWChatWidget::onKick()
   787 void HWChatWidget::onKick()
   786 {
   788 {
   787     /*QListWidgetItem * curritem = chatNicks->currentItem();
   789     QModelIndexList mil = chatNicks->selectionModel()->selectedRows();
   788     if (curritem)
   790 
   789         emit kick(curritem->text());*/
   791     if(mil.size())
       
   792         emit kick(mil[0].data().toString());
   790 }
   793 }
   791 
   794 
   792 void HWChatWidget::onBan()
   795 void HWChatWidget::onBan()
   793 {
   796 {
   794     /*QListWidgetItem * curritem = chatNicks->currentItem();
   797     QModelIndexList mil = chatNicks->selectionModel()->selectedRows();
   795     if (curritem)
   798 
   796         emit ban(curritem->text());*/
   799     if(mil.size())
       
   800         emit ban(mil[0].data().toString());
   797 }
   801 }
   798 
   802 
   799 void HWChatWidget::onInfo()
   803 void HWChatWidget::onInfo()
   800 {
   804 {
   801     /*QListWidgetItem * curritem = chatNicks->currentItem();
   805     QModelIndexList mil = chatNicks->selectionModel()->selectedRows();
   802     if (curritem)
   806 
   803         emit info(curritem->text());*/
   807     if(mil.size())
       
   808         emit info(mil[0].data().toString());
   804 }
   809 }
   805 
   810 
   806 void HWChatWidget::onFollow()
   811 void HWChatWidget::onFollow()
   807 {
   812 {
   808     /*QListWidgetItem * curritem = chatNicks->currentItem();
   813     QModelIndexList mil = chatNicks->selectionModel()->selectedRows();
   809     if (curritem)
   814 
   810         emit follow(curritem->text());*/
   815     if(mil.size())
       
   816         emit follow(mil[0].data().toString());
   811 }
   817 }
   812 
   818 
   813 void HWChatWidget::onIgnore()
   819 void HWChatWidget::onIgnore()
   814 {
   820 {
   815     /*QListWidgetItem * curritem = chatNicks->currentItem();
   821     QModelIndexList mil = chatNicks->selectionModel()->selectedRows();
   816     QString nick = "";
   822 
   817     if(curritem != NULL)
   823     QString nick;
   818         nick = curritem->text();
   824     if(mil.size())
       
   825         nick = mil[0].data().toString();
   819     else
   826     else
   820         nick = m_clickedNick;
   827         nick = m_clickedNick;
   821 
   828 
   822     if(ignoreList.contains(nick, Qt::CaseInsensitive)) // already on list - remove him
   829     QSortFilterProxyModel * playersSortFilterModel = qobject_cast<QSortFilterProxyModel *>(chatNicks->model());
   823     {
   830     if(!playersSortFilterModel)
   824         ignoreList.removeAll(nick.toLower());
   831         return;
       
   832 
       
   833     PlayersListModel * players = qobject_cast<PlayersListModel *>(playersSortFilterModel->sourceModel());
       
   834 
       
   835     if(!players)
       
   836         return;
       
   837 
       
   838     if(players->isFlagSet(nick, PlayersListModel::Ignore))
       
   839     {
       
   840         players->setFlag(nick, PlayersListModel::Ignore, false);
   825         chatEditLine->addNickname(nick);
   841         chatEditLine->addNickname(nick);
   826         displayNotice(tr("%1 has been removed from your ignore list").arg(linkedNick(nick)));
   842         displayNotice(tr("%1 has been removed from your ignore list").arg(linkedNick(nick)));
   827     }
   843     }
   828     else // not on list - add
   844     else // not on list - add
   829     {
   845     {
   830         // don't consider ignored people friends
   846         // don't consider ignored people friends
   831         if(friendsList.contains(nick, Qt::CaseInsensitive))
   847         if(players->isFlagSet(nick, PlayersListModel::Friend))
   832             emit onFriend();
   848             emit onFriend();
   833 
   849 
   834         // scroll down on first ignore added so that people see where that nick went to
   850         players->setFlag(nick, PlayersListModel::Ignore, true);
   835         if (ignoreList.isEmpty())
       
   836             chatNicks->scrollToBottom();
       
   837 
       
   838         ignoreList << nick.toLower();
       
   839         chatEditLine->removeNickname(nick);
   851         chatEditLine->removeNickname(nick);
   840         displayNotice(tr("%1 has been added to your ignore list").arg(linkedNick(nick)));
   852         displayNotice(tr("%1 has been added to your ignore list").arg(linkedNick(nick)));
   841     }
   853     }
   842 
   854 
   843     if(curritem != NULL)
   855     if(mil.size())
   844     {
   856     {
   845         updateNickItem(curritem); // update icon/sort order/etc
   857         chatNicks->scrollTo(chatNicks->selectionModel()->selectedRows()[0]);
   846         chatNicks->sortItems();
       
   847         chatNickSelected(0); // update context menu
   858         chatNickSelected(0); // update context menu
   848     }*/
   859     }
   849 }
   860 }
   850 
   861 
   851 void HWChatWidget::onFriend()
   862 void HWChatWidget::onFriend()
   852 {
   863 {
   853     /*QListWidgetItem * curritem = chatNicks->currentItem();
   864     QModelIndexList mil = chatNicks->selectionModel()->selectedRows();
   854     QString nick = "";
   865 
   855     if(curritem != NULL)
   866     QString nick;
   856         nick = curritem->text();
   867     if(mil.size())
       
   868         nick = mil[0].data().toString();
   857     else
   869     else
   858         nick = m_clickedNick;
   870         nick = m_clickedNick;
   859 
   871 
   860     if(friendsList.contains(nick, Qt::CaseInsensitive)) // already on list - remove him
   872     QSortFilterProxyModel * playersSortFilterModel = qobject_cast<QSortFilterProxyModel *>(chatNicks->model());
   861     {
   873     if(!playersSortFilterModel)
   862         friendsList.removeAll(nick.toLower());
   874         return;
       
   875 
       
   876     PlayersListModel * players = qobject_cast<PlayersListModel *>(playersSortFilterModel->sourceModel());
       
   877 
       
   878     if(!players)
       
   879         return;
       
   880 
       
   881     if(players->isFlagSet(nick, PlayersListModel::Friend))
       
   882     {
       
   883         players->setFlag(nick, PlayersListModel::Friend, false);
       
   884         chatEditLine->removeNickname(nick);
   863         displayNotice(tr("%1 has been removed from your friends list").arg(linkedNick(nick)));
   885         displayNotice(tr("%1 has been removed from your friends list").arg(linkedNick(nick)));
   864     }
   886     }
   865     else // not on list - add
   887     else // not on list - add
   866     {
   888     {
   867         // don't ignore the new friend
   889         if(players->isFlagSet(nick, PlayersListModel::Ignore))
   868         if(ignoreList.contains(nick, Qt::CaseInsensitive))
       
   869             emit onIgnore();
   890             emit onIgnore();
   870 
   891 
   871         // scroll up on first friend added so that people see where that nick went to
   892         players->setFlag(nick, PlayersListModel::Friend, true);
   872         if (friendsList.isEmpty())
   893         chatEditLine->addNickname(nick);
   873             chatNicks->scrollToTop();
       
   874 
       
   875         friendsList << nick.toLower();
       
   876         displayNotice(tr("%1 has been added to your friends list").arg(linkedNick(nick)));
   894         displayNotice(tr("%1 has been added to your friends list").arg(linkedNick(nick)));
   877     }
   895     }
   878 
   896 
   879     if(curritem != NULL)
   897     if(mil.size())
   880     {
   898     {
   881         updateNickItem(curritem); // update icon/sort order/etc
   899         chatNicks->scrollTo(chatNicks->selectionModel()->selectedRows()[0]);
   882         chatNicks->sortItems();
       
   883         chatNickSelected(0); // update context menu
   900         chatNickSelected(0); // update context menu
   884     }*/
   901     }
   885 }
   902 }
   886 
   903 
   887 void HWChatWidget::chatNickDoubleClicked(QListWidgetItem * item)
   904 void HWChatWidget::chatNickDoubleClicked(QListWidgetItem * item)
   888 {
   905 {
   889     if (item != NULL)
   906     if (item != NULL)