24#include "improtocols.h"
27#include <klocalizedstring.h>
30 : mProtocol(QLatin1String(
"messaging/aim"))
35IMAddress::IMAddress(
const QString &protocol,
const QString &name,
bool preferred)
38 , mPreferred(preferred)
42void IMAddress::setProtocol(
const QString &protocol)
47QString IMAddress::protocol()
const
52void IMAddress::setName(
const QString &name)
57QString IMAddress::name()
const
62void IMAddress::setPreferred(
bool preferred)
64 mPreferred = preferred;
67bool IMAddress::preferred()
const
72IMModel::IMModel(QObject *parent)
73 : QAbstractItemModel(parent)
81void IMModel::setAddresses(
const IMAddress::List &addresses)
83 emit layoutAboutToBeChanged();
85 mAddresses = addresses;
90IMAddress::List IMModel::addresses()
const
95QModelIndex IMModel::index(
int row,
int column,
const QModelIndex &parent)
const
98 return createIndex(row, column);
101QModelIndex IMModel::parent(
const QModelIndex &child)
const
104 return QModelIndex();
107QVariant IMModel::data(
const QModelIndex &index,
int role)
const
109 if (!index.isValid()) {
113 if (index.row() < 0 || index.row() >= mAddresses.count()) {
117 if (index.column() < 0 || index.column() > 1) {
121 const IMAddress &address = mAddresses[index.row()];
123 if (role == Qt::DisplayRole) {
124 if (index.column() == 0) {
125 return IMProtocols::self()->name(address.protocol());
127 return address.name();
131 if (role == Qt::DecorationRole) {
132 if (index.column() == 1) {
136 return KIcon(IMProtocols::self()->icon(address.protocol()));
139 if (role == Qt::EditRole) {
140 if (index.column() == 0) {
141 return address.protocol();
143 return address.name();
147 if (role == ProtocolRole) {
148 return address.protocol();
151 if (role == IsPreferredRole) {
152 return address.preferred();
158bool IMModel::setData(
const QModelIndex &index,
const QVariant &value,
int role)
160 if (!index.isValid()) {
164 if (index.row() < 0 || index.row() >= mAddresses.count()) {
168 if (index.column() < 0 || index.column() > 1) {
172 IMAddress &address = mAddresses[index.row()];
174 if (role == Qt::EditRole) {
175 if (index.column() == 1) {
176 address.setName(value.toString());
177 emit dataChanged(index, index);
182 if (role == ProtocolRole) {
183 address.setProtocol(value.toString());
184 emit dataChanged(this->index(index.row(), 0), this->index(index.row(), 1));
188 if (role == IsPreferredRole) {
189 address.setPreferred(value.toBool());
190 emit dataChanged(this->index(index.row(), 0), this->index(index.row(), 1));
197QVariant IMModel::headerData(
int section, Qt::Orientation orientation,
int role)
const
199 if (section < 0 || section > 1) {
203 if (orientation != Qt::Horizontal) {
207 if (role != Qt::DisplayRole) {
212 return i18nc(
"instant messaging protocol",
"Protocol");
214 return i18nc(
"instant messaging address",
"Address");
218Qt::ItemFlags IMModel::flags(
const QModelIndex &index)
const
220 if (!index.isValid() || index.row() < 0 || index.row() >= mAddresses.count()) {
221 return QAbstractItemModel::flags(index);
224 const Qt::ItemFlags parentFlags = QAbstractItemModel::flags(index);
225 return (parentFlags | Qt::ItemIsEnabled | Qt::ItemIsEditable);
228int IMModel::columnCount(
const QModelIndex &parent)
const
230 if (!parent.isValid()) {
237int IMModel::rowCount(
const QModelIndex &parent)
const
239 if (!parent.isValid()) {
240 return mAddresses.count();
246bool IMModel::insertRows(
int row,
int count,
const QModelIndex &parent)
248 if (parent.isValid()) {
252 beginInsertRows(parent, row, row + count - 1);
253 for (
int i = 0; i < count; ++i) {
254 mAddresses.insert(row, IMAddress());
261bool IMModel::removeRows(
int row,
int count,
const QModelIndex &parent)
263 if (parent.isValid()) {
267 beginRemoveRows(parent, row, row + count - 1);
268 for (
int i = 0; i < count; ++i) {
269 mAddresses.remove(row);