acsacqwdfw

This commit is contained in:
Martin Rotter 2013-12-14 15:45:47 +01:00
parent a3803ee6bc
commit 41911f7f3e
3 changed files with 68 additions and 39 deletions

View File

@ -31,12 +31,15 @@ class FeedsModel : public QAbstractItemModel {
void loadFromDatabase();
// Returns all categories.
QHash<int, FeedsModelCategory*> getCategories();
// Returns categories from the subtree with given root node.
QHash<int, FeedsModelCategory*> getCategories(FeedsModelRootItem *root);
bool addFeed(FeedsModelFeed *feed, int parent_id);
protected:
// Takes lists of feeds/categories and assembles
// them into the tree structure.
void assembleCategories(CategoryAssignment categories);
void assembleFeeds(FeedAssignment feeds);

View File

@ -33,7 +33,7 @@ MessagesModel::~MessagesModel() {
}
bool MessagesModel::submitAll() {
qFatal("Submittting changes via model is not allowed.");
qFatal("Submitting changes via model is not allowed.");
return false;
}
@ -51,7 +51,6 @@ void MessagesModel::fetchAll() {
void MessagesModel::setupFonts() {
m_normalFont = QtSingleApplication::font("MessagesView");
m_boldFont = m_normalFont;
m_boldFont.setBold(true);
}
@ -103,8 +102,8 @@ void MessagesModel::setupHeaderData() {
tr("Date of the most recent update of the message.") << tr("Contents of the message.");
}
Qt::ItemFlags MessagesModel::flags(const QModelIndex &idx) const {
Q_UNUSED(idx)
Qt::ItemFlags MessagesModel::flags(const QModelIndex &index) const {
Q_UNUSED(index)
#if QT_VERSION >= 0x050000
if (m_isInEditingMode) {
@ -123,39 +122,38 @@ QVariant MessagesModel::data(int row, int column, int role) const {
return data(index(row, column), role);
}
QVariant MessagesModel::data(const QModelIndex &idx, int role) const {
QVariant MessagesModel::data(const QModelIndex &index, int role) const {
switch (role) {
// Human readable data for viewing.
case Qt::DisplayRole: {
int index_column = idx.column();
int index_column = index.column();
if (index_column != MSG_DB_IMPORTANT_INDEX &&
index_column != MSG_DB_READ_INDEX) {
return QSqlTableModel::data(idx, role);
return QSqlTableModel::data(index, role);
}
else {
return QVariant();
}
}
// Return RAW data for EditRole.
case Qt::EditRole:
return QSqlTableModel::data(idx, role);
return QSqlTableModel::data(index, role);
case Qt::FontRole:
return record(idx.row()).value(MSG_DB_READ_INDEX).toInt() == 1 ?
return record(index.row()).value(MSG_DB_READ_INDEX).toInt() == 1 ?
m_normalFont :
m_boldFont;
case Qt::DecorationRole: {
int index_column = idx.column();
int index_column = index.column();
if (index_column == MSG_DB_READ_INDEX) {
return record(idx.row()).value(MSG_DB_READ_INDEX).toInt() == 1 ?
return record(index.row()).value(MSG_DB_READ_INDEX).toInt() == 1 ?
m_readIcon :
m_unreadIcon;
}
else if (index_column == MSG_DB_IMPORTANT_INDEX) {
return record(idx.row()).value(MSG_DB_IMPORTANT_INDEX).toInt() == 1 ?
return record(index.row()).value(MSG_DB_IMPORTANT_INDEX).toInt() == 1 ?
m_favoriteIcon :
QVariant();
}
@ -169,13 +167,14 @@ QVariant MessagesModel::data(const QModelIndex &idx, int role) const {
}
}
bool MessagesModel::setData(const QModelIndex &idx, const QVariant &value, int role) {
bool MessagesModel::setData(const QModelIndex &index,
const QVariant &value,
int role) {
#if QT_VERSION >= 0x050000
m_isInEditingMode = true;
#endif
bool set_data_result = QSqlTableModel::setData(idx, value, role);
bool set_data_result = QSqlTableModel::setData(index, value, role);
#if QT_VERSION >= 0x050000
m_isInEditingMode = false;
@ -184,9 +183,17 @@ bool MessagesModel::setData(const QModelIndex &idx, const QVariant &value, int r
return set_data_result;
}
bool MessagesModel::setMessageRead(int row_index, int read) {
if (!database().transaction()) {
qWarning("Starting transaction for batch message read change.");
bool MessagesModel::setMessageRead(int row_index, int read) {
if (data(row_index, MSG_DB_READ_INDEX, Qt::EditRole).toInt() == read) {
// Read status is the same is the one currently set.
// In that case, no extra work is needed.
return true;
}
QSqlDatabase db_handle = database();
if (!db_handle.transaction()) {
qWarning("Starting transaction for message read change.");
return false;
}
@ -196,15 +203,19 @@ bool MessagesModel::setMessageRead(int row_index, int read) {
if (!working_change) {
// If rewriting in the model failed, then cancel all actions.
qDebug("Setting of new data to the model failed for message read change.");
db_handle.rollback();
return false;
}
QSqlDatabase db_handle = database();
int message_id;
QSqlQuery query_delete_msg(db_handle);
if (!query_delete_msg.prepare("UPDATE messages SET read = :read "
"WHERE id = :id")) {
qWarning("Query preparation failed for message read change.");
db_handle.rollback();
return false;
}
@ -227,9 +238,11 @@ bool MessagesModel::setMessageRead(int row_index, int read) {
}
}
bool MessagesModel::switchMessageImportance(int row_index) {
if (!database().transaction()) {
qWarning("Starting transaction for batch message importance switch failed.");
bool MessagesModel::switchMessageImportance(int row_index) {
QSqlDatabase db_handle = database();
if (!db_handle.transaction()) {
qWarning("Starting transaction for message importance switch failed.");
return false;
}
@ -243,15 +256,19 @@ bool MessagesModel::switchMessageImportance(int row_index) {
if (!working_change) {
// If rewriting in the model failed, then cancel all actions.
qDebug("Setting of new data to the model failed for message importance change.");
db_handle.rollback();
return false;
}
QSqlDatabase db_handle = database();
int message_id;
QSqlQuery query_delete_msg(db_handle);
if (!query_delete_msg.prepare("UPDATE messages SET important = :important "
"WHERE id = :id")) {
qWarning("Query preparation failed for message importance switch.");
db_handle.rollback();
return false;
}
@ -275,17 +292,20 @@ bool MessagesModel::switchMessageImportance(int row_index) {
}
bool MessagesModel::switchBatchMessageImportance(const QModelIndexList &messages) {
if (!database().transaction()) {
QSqlDatabase db_handle = database();
if (!db_handle.transaction()) {
qWarning("Starting transaction for batch message importance switch failed.");
return false;
}
QSqlDatabase db_handle = database();
int message_id, importance;
QSqlQuery query_delete_msg(db_handle);
if (!query_delete_msg.prepare("UPDATE messages SET important = :important "
"WHERE id = :id")) {
qWarning("Query preparation failed for message importance switch.");
db_handle.rollback();
return false;
}
@ -312,17 +332,20 @@ bool MessagesModel::switchBatchMessageImportance(const QModelIndexList &messages
}
bool MessagesModel::setBatchMessagesDeleted(const QModelIndexList &messages, int deleted) {
if (!database().transaction()) {
QSqlDatabase db_handle = database();
if (!db_handle.transaction()) {
qWarning("Starting transaction for batch message deletion.");
return false;
}
QSqlDatabase db_handle = database();
int message_id;
QSqlQuery query_delete_msg(db_handle);
if (!query_delete_msg.prepare("UPDATE messages SET deleted = :deleted "
"WHERE id = :id")) {
qWarning("Query preparation failed for message deletion.");
db_handle.rollback();
return false;
}
@ -346,17 +369,20 @@ bool MessagesModel::setBatchMessagesDeleted(const QModelIndexList &messages, int
}
bool MessagesModel::setBatchMessagesRead(const QModelIndexList &messages, int read) {
if (!database().transaction()) {
QSqlDatabase db_handle = database();
if (!db_handle.transaction()) {
qWarning("Starting transaction for batch message read change.");
return false;
}
QSqlDatabase db_handle = database();
int message_id;
QSqlQuery query_delete_msg(db_handle);
if (!query_delete_msg.prepare("UPDATE messages SET read = :read "
"WHERE id = :id")) {
qWarning("Query preparation failed for message read change.");
db_handle.rollback();
return false;
}

View File

@ -13,16 +13,16 @@
// NOTE: This is primarily used for transfering data
// to WebBrowser responsible for displaying of messages.
class Message {
friend class WebBrowser;
friend class MessagesModel;
friend class MessagesView;
private:
QString m_title;
QString m_url;
QString m_author;
QString m_contents;
QDateTime m_updated;
friend class WebBrowser;
friend class MessagesModel;
friend class MessagesView;
};
@ -35,11 +35,11 @@ class MessagesModel : public QSqlTableModel {
virtual ~MessagesModel();
// Model implementation.
bool setData(const QModelIndex &idx, const QVariant &value, int role = Qt::EditRole);
QVariant data(const QModelIndex &idx, int role = Qt::DisplayRole) const;
bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole);
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;
QVariant data(int row, int column, int role = Qt::DisplayRole) const;
QVariant headerData(int section, Qt::Orientation orientation, int role) const;
Qt::ItemFlags flags(const QModelIndex &idx) const;
Qt::ItemFlags flags(const QModelIndex &index) const;
public:
// Sets up all icons which are used directly by this model.