This means they are typesafe now and cannot be randomly interchanged with built-ins
anymore. Conversions to int now need to be made explicit. Take care when getting *Id
out of QVariant!
Distclean necessary. Yeah, I know.
src/qtui/settingspages/networkssettingspage.ui
src/qtui/settingspages/nickeditdlgnew.ui
src/qtui/settingspages/saveidentitiesdlg.ui
-src/qtui/settingspages/servereditdlg.ui
src/qtui/settingspages/settingspages.pri
src/qtui/topicwidget.cpp
src/qtui/topicwidget.h
}
void BufferModel::mapProperty(int column, int role, QObject *target, const QByteArray &property) {
- qDebug() << property;
propertyMapper()->addMapping(column, role, target, property);
}
}
quint64 BufferItem::id() const {
- return bufferInfo().uid();
+ return bufferInfo().uid().toInt();
}
bool BufferItem::isStatusBuffer() const {
case NetworkModel::ItemTypeRole:
return NetworkModel::BufferItemType;
case NetworkModel::BufferIdRole:
- return bufferInfo().uid();
+ return QVariant::fromValue<BufferId>(bufferInfo().uid());
case NetworkModel::NetworkIdRole:
- return bufferInfo().networkId();
+ return QVariant::fromValue<NetworkId>(bufferInfo().networkId());
case NetworkModel::BufferTypeRole:
return int(bufferType());
case NetworkModel::ItemActiveRole:
QVariant NetworkItem::data(int column, int role) const {
switch(role) {
case NetworkModel::NetworkIdRole:
- return _networkId;
+ return QVariant::fromValue<NetworkId>(_networkId);
case NetworkModel::ItemTypeRole:
return NetworkModel::NetworkItemType;
case NetworkModel::ItemActiveRole:
}
quint64 NetworkItem::id() const {
- return _networkId;
+ return _networkId.toInt();
}
bool NetworkItem::isActive() const {
// experimental stuff :)
QModelIndex NetworkModel::networkIndex(NetworkId networkId) {
- return indexById(networkId);
+ return indexById(networkId.toInt());
}
NetworkItem *NetworkModel::existsNetworkItem(NetworkId networkId) {
- return qobject_cast<NetworkItem *>(rootItem->childById(networkId));
+ return qobject_cast<NetworkItem *>(rootItem->childById(networkId.toInt()));
}
NetworkItem *NetworkModel::networkItem(NetworkId networkId) {
AbstractTreeItem *netItem, *bufferItem;
for(int i = 0; i < rootItem->childCount(); i++) {
netItem = rootItem->child(i);
- if((bufferItem = netItem->childById(bufferId))) {
+ if((bufferItem = netItem->childById(bufferId.toInt()))) {
return indexById(bufferItem->id(), networkIndex(netItem->id()));
}
}
QStringList bufferlist;
QString netid, uid, bufferid;
foreach(QModelIndex index, indexes) {
- netid = QString::number(index.data(NetworkIdRole).value<NetworkId>());
- uid = QString::number(index.data(BufferIdRole).value<BufferId>());
+ netid = QString::number(index.data(NetworkIdRole).value<NetworkId>().toInt());
+ uid = QString::number(index.data(BufferIdRole).value<BufferId>().toInt());
bufferid = QString("%1:%2").arg(netid).arg(uid);
if(!bufferlist.contains(bufferid))
bufferlist << bufferid;
if(bufferId == parent.data(BufferIdRole).value<BufferId>())
return false;
- Q_ASSERT(rootItem->childById(netId));
- Q_ASSERT(rootItem->childById(netId)->childById(bufferId));
+ Q_ASSERT(rootItem->childById(netId.toInt()));
+ Q_ASSERT(rootItem->childById(netId.toInt())->childById(bufferId.toInt()));
// source must be a query too
- BufferItem::Type sourceType = (BufferItem::Type)rootItem->childById(netId)->childById(bufferId)->data(0, BufferTypeRole).toInt();
+ BufferItem::Type sourceType = (BufferItem::Type)rootItem->childById(netId.toInt())->childById(bufferId.toInt())->data(0, BufferTypeRole).toInt();
if(sourceType != BufferItem::QueryType)
return false;
return child(defaultColumn(), row);
}
-AbstractTreeItem *AbstractTreeItem::childById(int column, const uint &id) const {
+AbstractTreeItem *AbstractTreeItem::childById(int column, const quint64 &id) const {
if(!_childHash.contains(column)
|| !_childHash[column].contains(id))
return 0;
return _childHash[column].value(id);
}
-AbstractTreeItem *AbstractTreeItem::childById(const uint &id) const {
+AbstractTreeItem *AbstractTreeItem::childById(const quint64 &id) const {
return childById(defaultColumn(), id);
}
return QModelIndex();
}
-QModelIndex TreeModel::indexById(uint id, const QModelIndex &parent) const {
+QModelIndex TreeModel::indexById(quint64 id, const QModelIndex &parent) const {
AbstractTreeItem *parentItem;
if(!parent.isValid())
*****************************************/
class AbstractTreeItem : public QObject {
Q_OBJECT
- Q_PROPERTY(uint id READ id)
+ Q_PROPERTY(quint64 id READ id)
public:
AbstractTreeItem(AbstractTreeItem *parent = 0);
AbstractTreeItem *child(int column, int row) const;
AbstractTreeItem *child(int row) const;
- AbstractTreeItem *childById(int column, const uint &id) const;
- AbstractTreeItem *childById(const uint &id) const;
+ AbstractTreeItem *childById(int column, const quint64 &id) const;
+ AbstractTreeItem *childById(const quint64 &id) const;
int childCount(int column) const;
int childCount() const;
private:
QHash<int, QList<AbstractTreeItem *> > _childItems;
- QHash<int, QHash<quint64, AbstractTreeItem *> > _childHash; // uint to be compatible to qHash functions
+ QHash<int, QHash<quint64, AbstractTreeItem *> > _childHash; // uint to be compatible to qHash functions FIXME test this
AbstractTreeItem *_parentItem;
Qt::ItemFlags _flags;
QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const;
QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const;
- QModelIndex indexById(uint id, const QModelIndex &parent = QModelIndex()) const;
+ QModelIndex indexById(quint64 id, const QModelIndex &parent = QModelIndex()) const;
QModelIndex indexByItem(AbstractTreeItem *item) const;
QModelIndex parent(const QModelIndex &index) const;
}
uint qHash(const BufferInfo &bufferid) {
- return qHash(bufferid._id);
+ return qHash(bufferid._id.toInt());
}
}
void Identity::init() {
- setObjectName(QString::number(id()));
+ setObjectName(QString::number(id().toInt()));
}
void Identity::setToDefaults() {
}
bool Identity::isValid() const {
- return (id() > 0);
+ return (id().toInt() > 0);
}
IdentityId Identity::id() const {
// NOTE: DO NOT USE ON SYNCHRONIZED OBJECTS!
void Identity::setId(IdentityId _id) {
_identityId = _id;
- setObjectName(QString::number(id()));
+ setObjectName(QString::number(id().toInt()));
//emit idSet(id);
}
_topic(QString()),
network(network)
{
- setObjectName(QString::number(network->networkId()) + "/" + channelname);
+ setObjectName(QString::number(network->networkId().toInt()) + "/" + channelname);
}
IrcChannel::~IrcChannel() {
}
void IrcUser::updateObjectName() {
- QString newName = QString::number(network()->networkId()) + "/" + _nick;
+ QString newName = QString::number(network()->networkId().toInt()) + "/" + _nick;
QString oldName = objectName();
if(oldName != newName) {
setObjectName(newName);
#include <QTranslator>
#include "global.h"
-#include "identity.h"
#include "settings.h"
#if defined BUILD_CORE
_codecForEncoding(0),
_codecForDecoding(0)
{
- setObjectName(QString::number(networkid));
+ setObjectName(QString::number(networkid.toInt()));
}
// I think this is unnecessary since IrcUsers have us as their daddy :)
#ifndef _TYPES_H_
#define _TYPES_H_
+#include <QDebug>
#include <QString>
+#include <QVariant>
-/*
-class UnsignedId {
- quint32 id;
+class SignedId {
+ protected:
+ qint32 id;
public:
- inline UnsignedId(int _id = 0) { id = _id; }
- inline quint32 toInt() const { return id; }
- inline bool operator==(const UnsignedId &other) const { return id == other.id; }
- inline bool operator!=(const UnsignedId &other) const { return id != other.id; }
+ inline SignedId(int _id = 0) { id = _id; }
+ inline qint32 toInt() const { return id; }
+
+ inline bool operator==(const SignedId &other) const { return id == other.id; }
+ inline bool operator!=(const SignedId &other) const { return id != other.id; }
+ inline bool operator<(const SignedId &other) const { return id < other.id; }
+ inline bool operator==(int i) const { return id == i; }
+ inline bool operator!=(int i) const { return id != i; }
+ inline bool operator<(int i) const { return id < i; }
+ inline bool operator>(int i) const { return id > i; }
+ inline bool operator<=(int i) const { return id <= i; }
+
+ inline SignedId operator++(int) { id++; return *this; }
+ //inline operator int() const { return toInt(); } // no automatic conversion!
+
+ friend QDataStream &operator>>(QDataStream &in, SignedId &signedId);
};
-struct BufferId : public UnsignedId {
- inline BufferId(int _id = 0) : UnsignedId(_id) {};
+inline QDataStream &operator<<(QDataStream &out, const SignedId &signedId) { out << signedId.toInt(); return out; }
+inline QDataStream &operator>>(QDataStream &in, SignedId &signedId) { in >> signedId.id; return in; }
+inline QDebug operator<<(QDebug dbg, const SignedId &signedId) { dbg.space() << signedId.toInt(); return dbg; }
+inline uint qHash(const SignedId &id) { return qHash(id.toInt()); }
+struct UserId : public SignedId {
+ inline UserId(int _id = 0) : SignedId(_id) {};
+ //inline operator QVariant() const { return QVariant::fromValue<UserId>(*this); } // no automatic conversion!
};
-*/
-
-// FIXME make all ID types quint32 as soon as they all have been replaced
-typedef uint UserId; //!< Identifies a core user.
-typedef uint MsgId; //!< Identifies a message.
-typedef uint BufferId; //!< Identifies a buffer.
-// These must be signed!
-typedef qint32 NetworkId; //!< Identifies an IRC Network.
-typedef qint32 IdentityId; //!< Identifies an identity.
+
+struct MsgId : public SignedId {
+ inline MsgId(int _id = 0) : SignedId(_id) {};
+ //inline operator QVariant() const { return QVariant::fromValue<MsgId>(*this); }
+};
+
+struct BufferId : public SignedId {
+ inline BufferId(int _id = 0) : SignedId(_id) {};
+ //inline operator QVariant() const { return QVariant::fromValue<BufferId>(*this); }
+};
+
+struct NetworkId : public SignedId {
+ inline NetworkId(int _id = 0) : SignedId(_id) {};
+ //inline operator QVariant() const { return QVariant::fromValue<NetworkId>(*this); }
+};
+
+struct IdentityId : public SignedId {
+ inline IdentityId(int _id = 0) : SignedId(_id) {};
+ //inline operator QVariant() const { return QVariant::fromValue<IdentityId>(*this); }
+};
+
+Q_DECLARE_METATYPE(UserId);
+Q_DECLARE_METATYPE(MsgId);
+Q_DECLARE_METATYPE(BufferId);
+Q_DECLARE_METATYPE(NetworkId);
+Q_DECLARE_METATYPE(IdentityId);
//! Base class for exceptions.
struct Exception {
mutex.lock();
UserId uid = storage->validateUser(msg["User"].toString(), msg["Password"].toString());
mutex.unlock();
- if(!uid) {
+ if(uid == 0) {
reply["MsgType"] = "ClientLoginReject";
reply["Error"] = tr("<b>Invalid username or password!</b><br>The username/password combination you supplied could not be found in the database.");
SignalProxy::writeDataToDevice(socket, reply);
//connect(this, SIGNAL(disconnectFromIrc(QString)), network, SLOT(disconnectFromIrc(QString)));
//connect(this, SIGNAL(msgFromGui(uint, QString, QString)), network, SLOT(userInput(uint, QString, QString)));
- connect(conn, SIGNAL(connected(NetworkId)), this, SLOT(networkConnected(NetworkId)));
- connect(conn, SIGNAL(disconnected(NetworkId)), this, SLOT(networkDisconnected(NetworkId)));
+ //connect(conn, SIGNAL(connected(NetworkId)), this, SLOT(networkConnected(NetworkId)));
+ //connect(conn, SIGNAL(disconnected(NetworkId)), this, SLOT(networkDisconnected(NetworkId)));
signalProxy()->attachSignal(conn, SIGNAL(connected(NetworkId)), SIGNAL(networkConnected(NetworkId)));
signalProxy()->attachSignal(conn, SIGNAL(disconnected(NetworkId)), SIGNAL(networkDisconnected(NetworkId)));
}
Message msg(buf, type, text, sender, flags);
msg.setMsgId(Core::storeMessage(msg));
- Q_ASSERT(msg.msgId());
+ Q_ASSERT(msg.msgId() != 0);
emit displayMsg(msg);
}
}
v["IrcUserCount"] = ircusercount;
v["IrcChannelCount"] = ircchannelcount;
- qDebug() << "nets:" << _networks.count() << " chans:" << ircchannelcount << " users:" << ircusercount;
QList<QVariant> idlist;
foreach(Identity *i, _identities.values()) idlist << QVariant::fromValue<Identity>(*i);
#include "coreusersettings.h"
-CoreUserSettings::CoreUserSettings(UserId uid) : CoreSettings(QString("CoreUser/%1").arg(uid)), user(uid) {
+CoreUserSettings::CoreUserSettings(UserId uid) : CoreSettings(QString("CoreUser/%1").arg(uid.toInt())), user(uid) {
}
void CoreUserSettings::storeIdentity(const Identity &identity) {
- setLocalValue(QString("Identities/%1").arg(identity.id()), QVariant::fromValue<Identity>(identity));
+ setLocalValue(QString("Identities/%1").arg(identity.id().toInt()), QVariant::fromValue<Identity>(identity));
}
void CoreUserSettings::removeIdentity(const Identity &identity) {
- removeLocalKey(QString("Identities/%1").arg(identity.id()));
+ removeLocalKey(QString("Identities/%1").arg(identity.id().toInt()));
}
Identity CoreUserSettings::identity(IdentityId id) {
- QVariant v = localValue(QString("Identities/%1").arg(id));
+ QVariant v = localValue(QString("Identities/%1").arg(id.toInt()));
if(qVariantCanConvert<Identity>(v)) {
return v.value<Identity>();
}
QList<IdentityId> CoreUserSettings::identityIds() {
QList<IdentityId> res;
foreach(QString id, localChildKeys("Identities")) {
- res << id.toUInt();
+ res << id.toInt();
}
return res;
}
connect(network, SIGNAL(currentServerSet(const QString &)), this, SLOT(sendPerform()));
connect(&socket, SIGNAL(connected()), this, SLOT(socketConnected()));
- connect(&socket, SIGNAL(disconnected()), this, SLOT(quit()));
+ //connect(&socket, SIGNAL(disconnected()), this, SLOT(quit())); FIXME
connect(&socket, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(socketError(QAbstractSocket::SocketError)));
connect(&socket, SIGNAL(stateChanged(QAbstractSocket::SocketState)), this, SLOT(socketStateChanged(QAbstractSocket::SocketState)));
connect(&socket, SIGNAL(readyRead()), this, SLOT(socketHasData()));
query.bindValue(":username", user);
query.exec();
query.first();
- UserId uid = query.value(0).toUInt();
+ UserId uid = query.value(0).toInt();
emit userAdded(uid, user);
return uid;
}
QSqlQuery query(logDb());
query.prepare(queryString("update_userpassword"));
- query.bindValue(":userid", user);
+ query.bindValue(":userid", user.toInt());
query.bindValue(":password", cryptopass);
query.exec();
}
void SqliteStorage::renameUser(UserId user, const QString &newName) {
QSqlQuery query(logDb());
query.prepare(queryString("update_username"));
- query.bindValue(":userid", user);
+ query.bindValue(":userid", user.toInt());
query.bindValue(":username", newName);
query.exec();
emit userRenamed(user, newName);
query.exec();
if(query.first()) {
- return query.value(0).toUInt();
+ return query.value(0).toInt();
} else {
return 0;
}
void SqliteStorage::delUser(UserId user) {
QSqlQuery query(logDb());
query.prepare(queryString("delete_backlog_by_uid"));
- query.bindValue(":userid", user);
+ query.bindValue(":userid", user.toInt());
query.exec();
query.prepare(queryString("delete_buffers_by_uid"));
- query.bindValue(":userid", user);
+ query.bindValue(":userid", user.toInt());
query.exec();
query.prepare(queryString("delete_networks_by_uid"));
- query.bindValue(":userid", user);
+ query.bindValue(":userid", user.toInt());
query.exec();
query.prepare(queryString("delete_quasseluser"));
- query.bindValue(":userid", user);
+ query.bindValue(":userid", user.toInt());
query.exec();
// I hate the lack of foreign keys and on delete cascade... :(
emit userRemoved(user);
void SqliteStorage::createBuffer(UserId user, const QString &network, const QString &buffer) {
QSqlQuery *createBufferQuery = cachedQuery("insert_buffer");
- createBufferQuery->bindValue(":userid", user);
- createBufferQuery->bindValue(":userid2", user); // Qt can't handle same placeholder twice (maybe sqlites fault)
+ createBufferQuery->bindValue(":userid", user.toInt());
+ createBufferQuery->bindValue(":userid2", user.toInt()); // Qt can't handle same placeholder twice (maybe sqlites fault)
createBufferQuery->bindValue(":networkname", network);
createBufferQuery->bindValue(":buffername", buffer);
createBufferQuery->exec();
if(createBufferQuery->lastError().isValid()) {
if(createBufferQuery->lastError().number() == 19) { // Null Constraint violation
QSqlQuery *createNetworkQuery = cachedQuery("insert_network");
- createNetworkQuery->bindValue(":userid", user);
+ createNetworkQuery->bindValue(":userid", user.toInt());
createNetworkQuery->bindValue(":networkname", network);
createNetworkQuery->exec();
createBufferQuery->exec();
QSqlQuery query(logDb());
query.prepare("SELECT networkid FROM network "
"WHERE userid = :userid AND networkname = :networkname");
- query.bindValue(":userid", user);
+ query.bindValue(":userid", user.toInt());
query.bindValue(":networkname", network);
query.exec();
if(query.first())
- return query.value(0).value<NetworkId>();
+ return query.value(0).toInt();
else {
createBuffer(user, network, "");
query.exec();
if(query.first())
- return query.value(0).value<NetworkId>();
+ return query.value(0).toInt();
else {
qWarning() << "NETWORK NOT FOUND:" << network << "for User:" << user;
return 0;
QSqlQuery *getBufferInfoQuery = cachedQuery("select_bufferByName");
getBufferInfoQuery->bindValue(":networkname", network);
- getBufferInfoQuery->bindValue(":userid", user);
- getBufferInfoQuery->bindValue(":userid2", user); // Qt can't handle same placeholder twice... though I guess it's sqlites fault
+ getBufferInfoQuery->bindValue(":userid", user.toInt());
+ getBufferInfoQuery->bindValue(":userid2", user.toInt()); // Qt can't handle same placeholder twice... though I guess it's sqlites fault
getBufferInfoQuery->bindValue(":buffername", buffer);
getBufferInfoQuery->exec();
createBuffer(user, network, buffer);
getBufferInfoQuery->exec();
if(getBufferInfoQuery->first()) {
- bufferid = BufferInfo(getBufferInfoQuery->value(0).value<BufferId>(), networkId, 0, network, buffer);
+ bufferid = BufferInfo(getBufferInfoQuery->value(0).toInt(), networkId, 0, network, buffer);
emit bufferInfoUpdated(user, bufferid);
}
} else {
- bufferid = BufferInfo(getBufferInfoQuery->value(0).value<BufferId>(), networkId, 0, network, buffer);
+ bufferid = BufferInfo(getBufferInfoQuery->value(0).toInt(), networkId, 0, network, buffer);
}
Q_ASSERT(!getBufferInfoQuery->next());
QList<BufferInfo> bufferlist;
QSqlQuery query(logDb());
query.prepare(queryString("select_buffers"));
- query.bindValue(":userid", user);
+ query.bindValue(":userid", user.toInt());
query.bindValue(":time", time);
query.exec();
watchQuery(&query);
while(query.next()) {
- bufferlist << BufferInfo(query.value(0).value<BufferId>(), query.value(2).value<NetworkId>(), 0, query.value(3).toString(), query.value(1).toString());
+ bufferlist << BufferInfo(query.value(0).toInt(), query.value(2).toInt(), 0, query.value(3).toString(), query.value(1).toString());
}
return bufferlist;
}
MsgId SqliteStorage::logMessage(Message msg) {
QSqlQuery *logMessageQuery = cachedQuery("insert_message");
logMessageQuery->bindValue(":time", msg.timestamp().toTime_t());
- logMessageQuery->bindValue(":bufferid", msg.buffer().uid());
+ logMessageQuery->bindValue(":bufferid", msg.buffer().uid().toInt());
logMessageQuery->bindValue(":type", msg.type());
logMessageQuery->bindValue(":flags", msg.flags());
logMessageQuery->bindValue(":sender", msg.sender());
QSqlQuery *getLastMessageIdQuery = cachedQuery("select_lastMessage");
getLastMessageIdQuery->bindValue(":time", msg.timestamp().toTime_t());
- getLastMessageIdQuery->bindValue(":bufferid", msg.buffer().uid());
+ getLastMessageIdQuery->bindValue(":bufferid", msg.buffer().uid().toInt());
getLastMessageIdQuery->bindValue(":type", msg.type());
getLastMessageIdQuery->bindValue(":sender", msg.sender());
getLastMessageIdQuery->exec();
if(getLastMessageIdQuery->first()) {
- return getLastMessageIdQuery->value(0).value<MsgId>();
+ return getLastMessageIdQuery->value(0).toInt();
} else { // somethin went wrong... :(
qDebug() << getLastMessageIdQuery->lastQuery() << "time/bufferid/type/sender:" << msg.timestamp().toTime_t() << msg.buffer().uid() << msg.type() << msg.sender();
Q_ASSERT(false);
QList<Message> messagelist;
// we have to determine the real offset first
QSqlQuery *requestMsgsOffsetQuery = cachedQuery("select_messagesOffset");
- requestMsgsOffsetQuery->bindValue(":bufferid", buffer.uid());
+ requestMsgsOffsetQuery->bindValue(":bufferid", buffer.uid().toInt());
requestMsgsOffsetQuery->bindValue(":messageid", offset);
requestMsgsOffsetQuery->exec();
requestMsgsOffsetQuery->first();
// now let's select the messages
QSqlQuery *requestMsgsQuery = cachedQuery("select_messages");
- requestMsgsQuery->bindValue(":bufferid", buffer.uid());
- requestMsgsQuery->bindValue(":bufferid2", buffer.uid()); // Qt can't handle the same placeholder used twice
+ requestMsgsQuery->bindValue(":bufferid", buffer.uid().toInt());
+ requestMsgsQuery->bindValue(":bufferid2", buffer.uid().toInt()); // Qt can't handle the same placeholder used twice
requestMsgsQuery->bindValue(":limit", lastmsgs);
requestMsgsQuery->bindValue(":offset", offset);
requestMsgsQuery->exec();
requestMsgsQuery->value(5).toString(),
requestMsgsQuery->value(4).toString(),
requestMsgsQuery->value(3).toUInt());
- msg.setMsgId(requestMsgsQuery->value(0).value<MsgId>());
+ msg.setMsgId(requestMsgsQuery->value(0).toInt());
messagelist << msg;
}
return messagelist;
QList<Message> messagelist;
// we have to determine the real offset first
QSqlQuery *requestMsgsSinceOffsetQuery = cachedQuery("select_messagesSinceOffset");
- requestMsgsSinceOffsetQuery->bindValue(":bufferid", buffer.uid());
+ requestMsgsSinceOffsetQuery->bindValue(":bufferid", buffer.uid().toInt());
requestMsgsSinceOffsetQuery->bindValue(":since", since.toTime_t());
requestMsgsSinceOffsetQuery->exec();
requestMsgsSinceOffsetQuery->first();
// now let's select the messages
QSqlQuery *requestMsgsSinceQuery = cachedQuery("select_messagesSince");
- requestMsgsSinceQuery->bindValue(":bufferid", buffer.uid());
- requestMsgsSinceQuery->bindValue(":bufferid2", buffer.uid());
+ requestMsgsSinceQuery->bindValue(":bufferid", buffer.uid().toInt());
+ requestMsgsSinceQuery->bindValue(":bufferid2", buffer.uid().toInt());
requestMsgsSinceQuery->bindValue(":since", since.toTime_t());
requestMsgsSinceQuery->bindValue(":offset", offset);
requestMsgsSinceQuery->exec();
requestMsgsSinceQuery->value(5).toString(),
requestMsgsSinceQuery->value(4).toString(),
requestMsgsSinceQuery->value(3).toUInt());
- msg.setMsgId(requestMsgsSinceQuery->value(0).value<MsgId>());
+ msg.setMsgId(requestMsgsSinceQuery->value(0).toInt());
messagelist << msg;
}
QList<Message> SqliteStorage::requestMsgRange(BufferInfo buffer, int first, int last) {
QList<Message> messagelist;
QSqlQuery *requestMsgRangeQuery = cachedQuery("select_messageRange");
- requestMsgRangeQuery->bindValue(":bufferid", buffer.uid());
- requestMsgRangeQuery->bindValue(":bufferid2", buffer.uid());
+ requestMsgRangeQuery->bindValue(":bufferid", buffer.uid().toInt());
+ requestMsgRangeQuery->bindValue(":bufferid2", buffer.uid().toInt());
requestMsgRangeQuery->bindValue(":firstmsg", first);
requestMsgRangeQuery->bindValue(":lastmsg", last);
requestMsgRangeQuery->value(5).toString(),
requestMsgRangeQuery->value(4).toString(),
requestMsgRangeQuery->value(3).toUInt());
- msg.setMsgId(requestMsgRangeQuery->value(0).value<MsgId>());
+ msg.setMsgId(requestMsgRangeQuery->value(0).toInt());
messagelist << msg;
}
class BufferWidget : public QWidget {
Q_OBJECT
- Q_PROPERTY(uint currentBuffer READ currentBuffer WRITE setCurrentBuffer); // FIXME BufferId
+ Q_PROPERTY(BufferId currentBuffer READ currentBuffer WRITE setCurrentBuffer);
public:
BufferWidget(QWidget *parent = 0);
}
}
-uint ChatLine::msgId() const {
- return msg.buffer().uid();
+MsgId ChatLine::msgId() const {
+ return msg.msgId();
}
BufferInfo ChatLine::bufferInfo() const {
UiSettings s;
QVariant tsDef = s.value("DefaultTimestampColumnWidth", 90);
QVariant senderDef = s.value("DefaultSenderColumnWidth", 100);
- tsWidth = s.value(QString("%1/TimestampColumnWidth").arg(bufferId), tsDef).toInt();
- senderWidth = s.value(QString("%1/SenderColumnWidth").arg(bufferId), senderDef).toInt();
+ tsWidth = s.value(QString("%1/TimestampColumnWidth").arg(bufferId.toInt()), tsDef).toInt();
+ senderWidth = s.value(QString("%1/SenderColumnWidth").arg(bufferId.toInt()), senderDef).toInt();
computePositions();
adjustScrollBar();
verticalScrollBar()->setValue(verticalScrollBar()->maximum());
UiSettings s;
s.setValue("DefaultTimestampColumnWidth", tsWidth); // FIXME stupid dirty quicky
s.setValue("DefaultSenderColumnWidth", senderWidth);
- s.setValue(QString("%1/TimestampColumnWidth").arg(bufferId), tsWidth);
- s.setValue(QString("%1/SenderColumnWidth").arg(bufferId), senderWidth);
+ s.setValue(QString("%1/TimestampColumnWidth").arg(bufferId.toInt()), tsWidth);
+ s.setValue(QString("%1/SenderColumnWidth").arg(bufferId.toInt()), senderWidth);
}
QSize ChatWidget::sizeHint() const {
ui.stackedWidget->setCurrentWidget(ui.accountPage);
ui.accountButtonBox->setFocus();
+ ui.accountButtonBox->button(QDialogButtonBox::Ok)->setDefault(true);
CoreAccountSettings s;
QString lastacc = s.lastAccount();
ui.coreInfoLabel->setText("");
ui.loginStack->setCurrentWidget(ui.loginEmptyPage);
ui.loginButtonBox->setStandardButtons(QDialogButtonBox::Cancel|QDialogButtonBox::Ok);
+ ui.loginButtonBox->button(QDialogButtonBox::Ok)->setDefault(true);
ui.loginButtonBox->button(QDialogButtonBox::Ok)->setDisabled(true);
disconnect(ui.loginButtonBox, 0, this, 0);
connect(ui.loginButtonBox, SIGNAL(rejected()), this, SLOT(restartPhaseNull()));
ui.connectLabel->setText(tr("<div style=color:red;>Connection to %1 failed!</div>").arg(account["Host"].toString()));
ui.coreInfoLabel->setText(error);
ui.loginButtonBox->setStandardButtons(QDialogButtonBox::Retry|QDialogButtonBox::Cancel);
+ ui.loginButtonBox->button(QDialogButtonBox::Retry)->setDefault(true);
disconnect(ui.loginButtonBox, 0, this, 0);
connect(ui.loginButtonBox, SIGNAL(accepted()), this, SLOT(restartPhaseNull()));
connect(ui.loginButtonBox, SIGNAL(rejected()), this, SLOT(reject()));
ui.loginStack->setCurrentWidget(ui.loginCredentialsPage);
ui.loginStack->setMinimumSize(ui.loginStack->sizeHint()); ui.loginStack->updateGeometry();
ui.loginButtonBox->setStandardButtons(QDialogButtonBox::Ok|QDialogButtonBox::Cancel);
+ ui.loginButtonBox->button(QDialogButtonBox::Ok)->setDefault(true);
if(!account["User"].toString().isEmpty()) {
ui.user->setText(account["User"].toString());
if(account["RememberPasswd"].toBool()) {
ui.password->setText(account["Password"].toString());
ui.rememberPasswd->setChecked(true);
+ ui.loginButtonBox->setFocus();
} else {
ui.rememberPasswd->setChecked(false);
ui.password->setFocus();
void MainWin::setupViews() {
BufferModel *model = Client::bufferModel();
- addBufferView(tr("All Buffers"), model, BufferViewFilter::AllNets, QList<uint>());
- addBufferView(tr("All Channels"), model, BufferViewFilter::AllNets|BufferViewFilter::NoQueries|BufferViewFilter::NoServers, QList<uint>());
- addBufferView(tr("All Queries"), model, BufferViewFilter::AllNets|BufferViewFilter::NoChannels|BufferViewFilter::NoServers, QList<uint>());
- addBufferView(tr("All Networks"), model, BufferViewFilter::AllNets|BufferViewFilter::NoChannels|BufferViewFilter::NoQueries, QList<uint>());
- addBufferView(tr("Full Custom"), model, BufferViewFilter::FullCustom, QList<uint>());
+ addBufferView(tr("All Buffers"), model, BufferViewFilter::AllNets, QList<NetworkId>());
+ addBufferView(tr("All Channels"), model, BufferViewFilter::AllNets|BufferViewFilter::NoQueries|BufferViewFilter::NoServers, QList<NetworkId>());
+ addBufferView(tr("All Queries"), model, BufferViewFilter::AllNets|BufferViewFilter::NoChannels|BufferViewFilter::NoServers, QList<NetworkId>());
+ addBufferView(tr("All Networks"), model, BufferViewFilter::AllNets|BufferViewFilter::NoChannels|BufferViewFilter::NoQueries, QList<NetworkId>());
+ addBufferView(tr("Full Custom"), model, BufferViewFilter::FullCustom, QList<NetworkId>());
ui.menuViews->addSeparator();
}
-void MainWin::addBufferView(const QString &viewname, QAbstractItemModel *model, const BufferViewFilter::Modes &mode, const QList<uint> &nets) {
+void MainWin::addBufferView(const QString &viewname, QAbstractItemModel *model, const BufferViewFilter::Modes &mode, const QList<NetworkId> &nets) {
QDockWidget *dock = new QDockWidget(viewname, this);
dock->setObjectName(QString("ViewDock-" + viewname)); // should be unique for mainwindow state!
dock->setAllowedAreas(Qt::RightDockWidgetArea|Qt::LeftDockWidgetArea);
virtual ~MainWin();
void init();
- void addBufferView(const QString &, QAbstractItemModel *, const BufferViewFilter::Modes &, const QList<uint> &);
+ void addBufferView(const QString &, QAbstractItemModel *, const BufferViewFilter::Modes &, const QList<NetworkId> &);
AbstractUiMsg *layoutMsg(const Message &);
class NickListWidget : public QWidget {
Q_OBJECT
- Q_PROPERTY(uint currentBuffer READ currentBuffer WRITE setCurrentBuffer); // FIXME BufferId
+ Q_PROPERTY(BufferId currentBuffer READ currentBuffer WRITE setCurrentBuffer); // FIXME BufferId
public:
NickListWidget(QWidget *parent = 0);
Identity *temp = *i;
i = identities.erase(i);
toCreate.append(temp);
- ui.identityList->removeItem(ui.identityList->findData(temp->id()));
+ ui.identityList->removeItem(ui.identityList->findData(temp->id().toInt()));
} else {
if(**i != *Client::identity((*i)->id())) {
toUpdate.append(*i);
identities[id] = identity;
if(id == 1) {
// default identity is always the first one!
- ui.identityList->insertItem(0, identity->identityName(), id);
+ ui.identityList->insertItem(0, identity->identityName(), id.toInt());
} else {
QString name = identity->identityName();
for(int j = 0; j < ui.identityList->count(); j++) {
if((j>0 || ui.identityList->itemData(0).toInt() != 1) && name.localeAwareCompare(ui.identityList->itemText(j)) < 0) {
- ui.identityList->insertItem(j, name, id);
+ ui.identityList->insertItem(j, name, id.toInt());
widgetHasChanged();
return;
}
}
// append
- ui.identityList->insertItem(ui.identityList->count(), name, id);
+ ui.identityList->insertItem(ui.identityList->count(), name, id.toInt());
widgetHasChanged();
}
}
void IdentitiesSettingsPage::renameIdentity(IdentityId id, const QString &newName) {
Identity *identity = identities[id];
- ui.identityList->setItemText(ui.identityList->findData(identity->id()), newName);
+ ui.identityList->setItemText(ui.identityList->findData(identity->id().toInt()), newName);
identity->setIdentityName(newName);
}
void IdentitiesSettingsPage::removeIdentity(Identity *id) {
identities.remove(id->id());
- ui.identityList->removeItem(ui.identityList->findData(id->id()));
+ ui.identityList->removeItem(ui.identityList->findData(id->id().toInt()));
changedIdentities.removeAll(id->id());
if(currentId == id->id()) currentId = 0;
id->deleteLater();
//ui.identityList->setEditable(false);
displayIdentity(0);
} else {
- IdentityId id = ui.identityList->itemData(index).value<IdentityId>();
+ IdentityId id = ui.identityList->itemData(index).toInt();
if(identities.contains(id)) displayIdentity(identities[id]);
ui.deleteIdentity->setEnabled(id != 1); // default identity cannot be deleted
ui.renameIdentity->setEnabled(id != 1); // ...or renamed
// find a free (negative) ID
IdentityId id;
for(id = 1; id <= identities.count(); id++) {
- if(!identities.keys().contains(-id)) break;
+ if(!identities.keys().contains(-id.toInt())) break;
}
- id *= -1;
+ id = -id.toInt();
Identity *newId = new Identity(id, this);
if(dlg.duplicateId() != 0) {
// duplicate
newId->setIdentityName(dlg.identityName());
identities[id] = newId;
insertIdentity(newId);
- ui.identityList->setCurrentIndex(ui.identityList->findData(id));
+ ui.identityList->setCurrentIndex(ui.identityList->findData(id.toInt()));
widgetHasChanged();
}
}
IdentityId CreateIdentityDlg::duplicateId() const {
if(!ui.duplicateIdentity->isChecked()) return 0;
if(ui.identityList->currentIndex() >= 0) {
- return ui.identityList->itemData(ui.identityList->currentIndex()).value<IdentityId>();
+ return ui.identityList->itemData(ui.identityList->currentIndex()).toInt();
}
return 0;
}
connect(this, SIGNAL(activated(QModelIndex)), this, SLOT(joinChannel(QModelIndex)));
}
-void BufferView::setFilteredModel(QAbstractItemModel *model, BufferViewFilter::Modes mode, QList<uint> nets) {
+void BufferView::setFilteredModel(QAbstractItemModel *model, BufferViewFilter::Modes mode, QList<NetworkId> nets) {
BufferViewFilter *filter = new BufferViewFilter(model, mode, nets);
setModel(filter);
connect(this, SIGNAL(removeBuffer(const QModelIndex &)), filter, SLOT(removeBuffer(const QModelIndex &)));
BufferView(QWidget *parent = 0);
void init();
void setModel(QAbstractItemModel *model);
- void setFilteredModel(QAbstractItemModel *model, BufferViewFilter::Modes mode, QList<uint> nets);
+ void setFilteredModel(QAbstractItemModel *model, BufferViewFilter::Modes mode, QList<NetworkId> nets);
signals:
void removeBuffer(const QModelIndex &);
/*****************************************
* The Filter for the Tree View
*****************************************/
-BufferViewFilter::BufferViewFilter(QAbstractItemModel *model, const Modes &filtermode, const QList<uint> &nets)
+BufferViewFilter::BufferViewFilter(QAbstractItemModel *model, const Modes &filtermode, const QList<NetworkId> &nets)
: QSortFilterProxyModel(model),
mode(filtermode),
- networks(QSet<uint>::fromList(nets))
+ networks(QSet<NetworkId>::fromList(nets))
{
setSourceModel(model);
setSortCaseSensitivity(Qt::CaseInsensitive);
};
Q_DECLARE_FLAGS(Modes, Mode);
- BufferViewFilter(QAbstractItemModel *model, const Modes &mode, const QList<uint> &nets);
+ BufferViewFilter(QAbstractItemModel *model, const Modes &mode, const QList<NetworkId> &nets);
virtual Qt::ItemFlags flags(const QModelIndex &index) const;
virtual bool dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent);
private:
Modes mode;
- QSet<uint> networks;
- QSet<uint> buffers;
+ QSet<NetworkId> networks;
+ QSet<BufferId> buffers;
bool filterAcceptBuffer(const QModelIndex &) const;
bool filterAcceptNetwork(const QModelIndex &) const;
quasselVersion = "0.2.0-pre";
quasselDate = "2008-01-19";
- quasselBuild = 357;
+ quasselBuild = 358;
//! Minimum client build number the core needs
- clientBuildNeeded = 355;
+ clientBuildNeeded = 358;
clientVersionNeeded = quasselVersion;
//! Minimum core build number the client needs
- coreBuildNeeded = 355;
+ coreBuildNeeded = 358;
coreVersionNeeded = quasselVersion;
}