QTfrontend/model/playerslistmodel.cpp
branchsdl2transition
changeset 9798 f2b18754742f
parent 9727 e89ed65f62da
child 10753 e56db5d988ef
equal deleted inserted replaced
9711:7d0329f37181 9798:f2b18754742f
    82     endRemoveRows();
    82     endRemoveRows();
    83 
    83 
    84     return true;
    84     return true;
    85 }
    85 }
    86 
    86 
       
    87 QModelIndex PlayersListModel::nicknameIndex(const QString & nickname)
       
    88 {
       
    89     QModelIndexList mil = match(index(0), Qt::DisplayRole, nickname, 1, Qt::MatchExactly);
       
    90 
       
    91     if(mil.size() > 0)
       
    92         return mil[0];
       
    93     else
       
    94         return QModelIndex();
       
    95 }
    87 
    96 
    88 void PlayersListModel::addPlayer(const QString & nickname, bool notify)
    97 void PlayersListModel::addPlayer(const QString & nickname, bool notify)
    89 {
    98 {
    90     insertRow(rowCount());
    99     insertRow(rowCount());
    91 
   100 
   103     if(msg.isEmpty())
   112     if(msg.isEmpty())
   104         emit nickRemovedLobby(nickname);
   113         emit nickRemovedLobby(nickname);
   105     else
   114     else
   106         emit nickRemovedLobby(nickname, msg);
   115         emit nickRemovedLobby(nickname, msg);
   107 
   116 
   108     QModelIndexList mil = match(index(0), Qt::DisplayRole, nickname, 1, Qt::MatchExactly);
   117     QModelIndex mi = nicknameIndex(nickname);
   109 
   118 
   110     if(mil.size())
   119     if(mi.isValid())
   111         removeRow(mil[0].row());
   120         removeRow(mi.row());
   112 }
   121 }
   113 
   122 
   114 
   123 
   115 void PlayersListModel::playerJoinedRoom(const QString & nickname, bool notify)
   124 void PlayersListModel::playerJoinedRoom(const QString & nickname, bool notify)
   116 {
   125 {
   117     QModelIndexList mil = match(index(0), Qt::DisplayRole, nickname, 1, Qt::MatchExactly);
   126     QModelIndex mi = nicknameIndex(nickname);
   118 
   127 
   119     if(mil.size())
   128     if(mi.isValid())
   120     {
   129     {
   121         setData(mil[0], true, RoomFilterRole);
   130         setData(mi, true, RoomFilterRole);
   122         updateIcon(mil[0]);
   131         updateIcon(mi);
   123         updateSortData(mil[0]);
   132         updateSortData(mi);
   124     }
   133     }
   125 
   134 
   126     emit nickAdded(nickname, notify);
   135     emit nickAdded(nickname, notify);
   127 }
   136 }
   128 
   137 
   129 
   138 
   130 void PlayersListModel::playerLeftRoom(const QString & nickname)
   139 void PlayersListModel::playerLeftRoom(const QString & nickname)
   131 {
   140 {
   132     emit nickRemoved(nickname);
   141     emit nickRemoved(nickname);
   133 
   142 
   134     QModelIndexList mil = match(index(0), Qt::DisplayRole, nickname, 1, Qt::MatchExactly);
   143     QModelIndex mi = nicknameIndex(nickname);
   135 
   144 
   136     if(mil.size())
   145     if(mi.isValid())
   137     {
   146     {
   138         setData(mil[0], false, RoomFilterRole);
   147         setData(mi, false, RoomFilterRole);
   139         setData(mil[0], false, RoomAdmin);
   148         setData(mi, false, RoomAdmin);
   140         setData(mil[0], false, Ready);
   149         setData(mi, false, Ready);
   141         setData(mil[0], false, InGame);
   150         setData(mi, false, InGame);
   142         updateIcon(mil[0]);
   151         updateIcon(mi);
   143     }
   152     }
   144 }
   153 }
   145 
   154 
   146 
   155 
   147 void PlayersListModel::setFlag(const QString &nickname, StateFlag flagType, bool isSet)
   156 void PlayersListModel::setFlag(const QString &nickname, StateFlag flagType, bool isSet)
   148 {
   157 {
   149     QModelIndexList mil = match(index(0), Qt::DisplayRole, nickname, 1, Qt::MatchExactly);
   158     if(flagType == Friend)
   150 
   159     {
   151     if(mil.size())
   160         if(isSet)
   152     {
   161             m_friendsSet.insert(nickname.toLower());
   153         setData(mil[0], isSet, flagType);
   162         else
       
   163             m_friendsSet.remove(nickname.toLower());
       
   164 
       
   165         saveSet(m_friendsSet, "friends");
       
   166     }
       
   167     else if(flagType == Ignore)
       
   168     {
       
   169         if(isSet)
       
   170             m_ignoredSet.insert(nickname.toLower());
       
   171         else
       
   172             m_ignoredSet.remove(nickname.toLower());
       
   173 
       
   174         saveSet(m_ignoredSet, "ignore");
       
   175     }
       
   176 
       
   177     QModelIndex mi = nicknameIndex(nickname);
       
   178 
       
   179     if(mi.isValid())
       
   180     {
       
   181         setData(mi, isSet, flagType);
   154 
   182 
   155         if(flagType == Friend || flagType == ServerAdmin
   183         if(flagType == Friend || flagType == ServerAdmin
   156                 || flagType == Ignore || flagType == RoomAdmin)
   184                 || flagType == Ignore || flagType == RoomAdmin)
   157             updateSortData(mil[0]);
   185             updateSortData(mi);
   158 
   186 
   159         if(flagType == Friend)
   187         updateIcon(mi);
   160         {
       
   161             if(isSet)
       
   162                 m_friendsSet.insert(nickname.toLower());
       
   163             else
       
   164                 m_friendsSet.remove(nickname.toLower());
       
   165 
       
   166             saveSet(m_friendsSet, "friends");
       
   167         }
       
   168 
       
   169         if(flagType == Ignore)
       
   170         {
       
   171             if(isSet)
       
   172                 m_ignoredSet.insert(nickname.toLower());
       
   173             else
       
   174                 m_ignoredSet.remove(nickname.toLower());
       
   175 
       
   176             saveSet(m_ignoredSet, "ignore");
       
   177         }
       
   178 
       
   179         updateIcon(mil[0]);
       
   180     }
   188     }
   181 }
   189 }
   182 
   190 
   183 
   191 
   184 bool PlayersListModel::isFlagSet(const QString & nickname, StateFlag flagType)
   192 bool PlayersListModel::isFlagSet(const QString & nickname, StateFlag flagType)
   185 {
   193 {
   186     QModelIndexList mil = match(index(0), Qt::DisplayRole, nickname, 1, Qt::MatchExactly);
   194     QModelIndex mi = nicknameIndex(nickname);
   187 
   195 
   188     if(mil.size())
   196     if(mi.isValid())
   189         return mil[0].data(flagType).toBool();
   197         return mi.data(flagType).toBool();
       
   198     else if(flagType == Friend)
       
   199         return isFriend(nickname);
       
   200     else if(flagType == Ignore)
       
   201         return isIgnored(nickname);
   190     else
   202     else
   191         return false;
   203         return false;
   192 }
   204 }
   193 
   205 
   194 void PlayersListModel::resetRoomFlags()
   206 void PlayersListModel::resetRoomFlags()
   342 
   354 
   343     for(int i = rowCount() - 1; i >= 0; --i)
   355     for(int i = rowCount() - 1; i >= 0; --i)
   344         checkFriendIgnore(index(i));
   356         checkFriendIgnore(index(i));
   345 }
   357 }
   346 
   358 
       
   359 bool PlayersListModel::isFriend(const QString & nickname)
       
   360 {
       
   361     return m_friendsSet.contains(nickname.toLower());
       
   362 }
       
   363 
       
   364 bool PlayersListModel::isIgnored(const QString & nickname)
       
   365 {
       
   366     return m_ignoredSet.contains(nickname.toLower());
       
   367 }
   347 
   368 
   348 void PlayersListModel::checkFriendIgnore(const QModelIndex &mi)
   369 void PlayersListModel::checkFriendIgnore(const QModelIndex &mi)
   349 {
   370 {
   350     setData(mi, m_friendsSet.contains(mi.data().toString().toLower()), Friend);
   371     setData(mi, isFriend(mi.data().toString()), Friend);
   351     setData(mi, m_ignoredSet.contains(mi.data().toString().toLower()), Ignore);
   372     setData(mi, isIgnored(mi.data().toString()), Ignore);
   352 
   373 
   353     updateIcon(mi);
   374     updateIcon(mi);
   354     updateSortData(mi);
   375     updateSortData(mi);
   355 }
   376 }
   356 
   377