示例#1
0
QVariant
PlaceListModel::data (const QModelIndex &index, int role) const
{
  int idx = index.row ();
  if (idx < 0 || m_data.count () <= idx)
    return QVariant();

  Place *place = m_data[idx];

  switch (role)
  {
  case NAME:
    return place->name ();
  case PUBKEY:
    return place->pubKeyString ();
  case TYPE:
    return place->type ();
  case DESC:
    return place->desc ();
  case THREADS:
    return &m_threads[idx];
  default:
    return QVariant();
  }
}
/*!
  From QAbstractListModel.
  Returns data from model by \a index by \a role.
*/
QVariant PlacesModel::data(const QModelIndex &index,
                           int role /* Qt::DisplayRole */) const
{
    if (!index.isValid()) {
        return QVariant();
    }

    const int itemIndex(index.row());
    const int placesCount(mPlaces.count());
    int virtualIndex(0);
    Place *place = 0;

    // Skip all invisible places
    for (int i = 0; i < placesCount; ++i) {
        if (mPlaces[i]->visible()) {
            if (itemIndex == virtualIndex) {
                place = mPlaces[i];
                break;
            }
            else {
                virtualIndex++;
            }
        }
    }

    if (!place) {
        return QVariant();
    }

    QVariant value = QVariant();

    switch (role) {
    case NameRole:
        value = QVariant::fromValue(place->name());
        break;
    case StreetAddressRole:
        value = QVariant::fromValue(place->address().street());
        break;
    case LatitudeRole:
        value = QVariant::fromValue(place->coordinate().latitude());
        break;
    case LongitudeRole:
        value = QVariant::fromValue(place->coordinate().longitude());
        break;
    case IconUrlRole:
        value = QVariant::fromValue(place->iconUrl());
        break;
    case PlaceObjectRole:
        value = QVariant::fromValue((QObject*)place);
        break;
    default:
        break;
    }

    return value;
}