It's rather inefficient to store a QStringList in every item, since
it is the same for every type of item anyway. Use a pure virtual
accessor in the base class instead, and return a static QStringList
in every item type.
This prevents the usecase of adding properties dynamically after
creation, but we didn't use that feature anyway, so remove it.
* Network Items
*****************************************/
NetworkItem::NetworkItem(const NetworkId &netid, AbstractTreeItem *parent)
* Network Items
*****************************************/
NetworkItem::NetworkItem(const NetworkId &netid, AbstractTreeItem *parent)
- : PropertyMapItem(QList<QString>() << "networkName" << "currentServer" << "nickCount", parent),
+ : PropertyMapItem(parent),
_networkId(netid),
_statusBufferItem(0)
{
_networkId(netid),
_statusBufferItem(0)
{
+QStringList NetworkItem::propertyOrder() const
+{
+ static QStringList order{"networkName", "currentServer", "nickCount"};
+ return order;
+}
+
+
QVariant NetworkItem::data(int column, int role) const
{
switch (role) {
QVariant NetworkItem::data(int column, int role) const
{
switch (role) {
* Fancy Buffer Items
*****************************************/
BufferItem::BufferItem(const BufferInfo &bufferInfo, AbstractTreeItem *parent)
* Fancy Buffer Items
*****************************************/
BufferItem::BufferItem(const BufferInfo &bufferInfo, AbstractTreeItem *parent)
- : PropertyMapItem(QStringList() << "bufferName" << "topic" << "nickCount", parent),
+ : PropertyMapItem(parent),
_bufferInfo(bufferInfo),
_activity(BufferInfo::NoActivity)
{
_bufferInfo(bufferInfo),
_activity(BufferInfo::NoActivity)
{
+QStringList BufferItem::propertyOrder() const
+{
+ static QStringList order{"bufferName", "topic", "nickCount"};
+ return order;
+}
+
+
void BufferItem::setActivityLevel(BufferInfo::ActivityLevel level)
{
if (_activity != level) {
void BufferItem::setActivityLevel(BufferInfo::ActivityLevel level)
{
if (_activity != level) {
const QList<QChar> UserCategoryItem::categories = QList<QChar>() << 'q' << 'a' << 'o' << 'h' << 'v';
UserCategoryItem::UserCategoryItem(int category, AbstractTreeItem *parent)
const QList<QChar> UserCategoryItem::categories = QList<QChar>() << 'q' << 'a' << 'o' << 'h' << 'v';
UserCategoryItem::UserCategoryItem(int category, AbstractTreeItem *parent)
- : PropertyMapItem(QStringList() << "categoryName", parent),
+ : PropertyMapItem(parent),
_category(category)
{
setFlags(Qt::ItemIsEnabled);
_category(category)
{
setFlags(Qt::ItemIsEnabled);
+QStringList UserCategoryItem::propertyOrder() const
+{
+ static QStringList order{"categoryName"};
+ return order;
+}
+
+
// caching this makes no sense, since we display the user number dynamically
QString UserCategoryItem::categoryName() const
{
// caching this makes no sense, since we display the user number dynamically
QString UserCategoryItem::categoryName() const
{
* Irc User Items
*****************************************/
IrcUserItem::IrcUserItem(IrcUser *ircUser, AbstractTreeItem *parent)
* Irc User Items
*****************************************/
IrcUserItem::IrcUserItem(IrcUser *ircUser, AbstractTreeItem *parent)
- : PropertyMapItem(QStringList() << "nickName", parent),
+ : PropertyMapItem(parent),
_ircUser(ircUser)
{
setObjectName(ircUser->nick());
_ircUser(ircUser)
{
setObjectName(ircUser->nick());
+QStringList IrcUserItem::propertyOrder() const
+{
+ static QStringList order{"nickName"};
+ return order;
+}
+
+
QVariant IrcUserItem::data(int column, int role) const
{
switch (role) {
QVariant IrcUserItem::data(int column, int role) const
{
switch (role) {
Q_PROPERTY(int nickCount READ nickCount)
public :
Q_PROPERTY(int nickCount READ nickCount)
public :
- NetworkItem(const NetworkId &netid, AbstractTreeItem *parent = 0);
+ NetworkItem(const NetworkId &netid, AbstractTreeItem *parent = 0);
+
+ virtual QStringList propertyOrder() const;
virtual QVariant data(int column, int row) const;
virtual QVariant data(int column, int row) const;
Q_PROPERTY(int nickCount READ nickCount)
public :
Q_PROPERTY(int nickCount READ nickCount)
public :
- BufferItem(const BufferInfo &bufferInfo, AbstractTreeItem *parent = 0);
+ BufferItem(const BufferInfo &bufferInfo, AbstractTreeItem *parent = 0);
+
+ virtual QStringList propertyOrder() const;
inline const BufferInfo &bufferInfo() const { return _bufferInfo; }
virtual QVariant data(int column, int role) const;
inline const BufferInfo &bufferInfo() const { return _bufferInfo; }
virtual QVariant data(int column, int role) const;
Q_PROPERTY(QString categoryName READ categoryName)
public :
Q_PROPERTY(QString categoryName READ categoryName)
public :
- UserCategoryItem(int category, AbstractTreeItem *parent);
+ UserCategoryItem(int category, AbstractTreeItem *parent);
+
+ virtual QStringList propertyOrder() const;
QString categoryName() const;
inline int categoryId() const { return _category; }
QString categoryName() const;
inline int categoryId() const { return _category; }
Q_PROPERTY(QString nickName READ nickName)
public :
Q_PROPERTY(QString nickName READ nickName)
public :
- IrcUserItem(IrcUser *ircUser, AbstractTreeItem *parent);
+ IrcUserItem(IrcUser *ircUser, AbstractTreeItem *parent);
+
+ virtual QStringList propertyOrder() const;
inline QString nickName() const { return _ircUser ? _ircUser->nick() : QString(); }
inline bool isActive() const { return _ircUser ? !_ircUser->isAway() : false; }
inline QString nickName() const { return _ircUser ? _ircUser->nick() : QString(); }
inline bool isActive() const { return _ircUser ? !_ircUser->isAway() : false; }
/*****************************************
* PropertyMapItem
*****************************************/
/*****************************************
* PropertyMapItem
*****************************************/
-PropertyMapItem::PropertyMapItem(const QStringList &propertyOrder, AbstractTreeItem *parent)
- : AbstractTreeItem(parent),
- _propertyOrder(propertyOrder)
-{
-}
-
-
PropertyMapItem::PropertyMapItem(AbstractTreeItem *parent)
PropertyMapItem::PropertyMapItem(AbstractTreeItem *parent)
- : AbstractTreeItem(parent),
- _propertyOrder(QStringList())
-{
-}
-
-
-PropertyMapItem::~PropertyMapItem()
+ : AbstractTreeItem(parent)
return toolTip(column);
case Qt::DisplayRole:
case TreeModel::SortRole: // fallthrough, since SortRole should default to DisplayRole
return toolTip(column);
case Qt::DisplayRole:
case TreeModel::SortRole: // fallthrough, since SortRole should default to DisplayRole
- return property(_propertyOrder[column].toLatin1());
+ return property(propertyOrder()[column].toLatin1());
default:
return QVariant();
}
default:
return QVariant();
}
if (column >= columnCount() || role != Qt::DisplayRole)
return false;
if (column >= columnCount() || role != Qt::DisplayRole)
return false;
- setProperty(_propertyOrder[column].toLatin1(), value);
+ setProperty(propertyOrder()[column].toLatin1(), value);
emit dataChanged(column);
return true;
}
emit dataChanged(column);
return true;
}
int PropertyMapItem::columnCount() const
{
int PropertyMapItem::columnCount() const
{
- return _propertyOrder.count();
-}
-
-
-void PropertyMapItem::appendProperty(const QString &property)
-{
- _propertyOrder << property;
+ return propertyOrder().count();
- PropertyMapItem(const QStringList &propertyOrder, AbstractTreeItem *parent = 0);
PropertyMapItem(AbstractTreeItem *parent = 0);
PropertyMapItem(AbstractTreeItem *parent = 0);
- virtual ~PropertyMapItem();
+ virtual QStringList propertyOrder() const = 0;
virtual QVariant data(int column, int role) const;
virtual bool setData(int column, const QVariant &value, int role);
virtual QString toolTip(int column) const { Q_UNUSED(column) return QString(); }
virtual int columnCount() const;
virtual QVariant data(int column, int role) const;
virtual bool setData(int column, const QVariant &value, int role);
virtual QString toolTip(int column) const { Q_UNUSED(column) return QString(); }
virtual int columnCount() const;
-
- void appendProperty(const QString &property);
-
-private:
- QStringList _propertyOrder;