acsacqwdfw
This commit is contained in:
parent
a3803ee6bc
commit
41911f7f3e
3 changed files with 68 additions and 39 deletions
|
@ -31,12 +31,15 @@ class FeedsModel : public QAbstractItemModel {
|
||||||
|
|
||||||
void loadFromDatabase();
|
void loadFromDatabase();
|
||||||
|
|
||||||
|
// Returns all categories.
|
||||||
QHash<int, FeedsModelCategory*> getCategories();
|
QHash<int, FeedsModelCategory*> getCategories();
|
||||||
|
|
||||||
|
// Returns categories from the subtree with given root node.
|
||||||
QHash<int, FeedsModelCategory*> getCategories(FeedsModelRootItem *root);
|
QHash<int, FeedsModelCategory*> getCategories(FeedsModelRootItem *root);
|
||||||
|
|
||||||
bool addFeed(FeedsModelFeed *feed, int parent_id);
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
// Takes lists of feeds/categories and assembles
|
||||||
|
// them into the tree structure.
|
||||||
void assembleCategories(CategoryAssignment categories);
|
void assembleCategories(CategoryAssignment categories);
|
||||||
void assembleFeeds(FeedAssignment feeds);
|
void assembleFeeds(FeedAssignment feeds);
|
||||||
|
|
||||||
|
|
|
@ -33,7 +33,7 @@ MessagesModel::~MessagesModel() {
|
||||||
}
|
}
|
||||||
|
|
||||||
bool MessagesModel::submitAll() {
|
bool MessagesModel::submitAll() {
|
||||||
qFatal("Submittting changes via model is not allowed.");
|
qFatal("Submitting changes via model is not allowed.");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -51,7 +51,6 @@ void MessagesModel::fetchAll() {
|
||||||
|
|
||||||
void MessagesModel::setupFonts() {
|
void MessagesModel::setupFonts() {
|
||||||
m_normalFont = QtSingleApplication::font("MessagesView");
|
m_normalFont = QtSingleApplication::font("MessagesView");
|
||||||
|
|
||||||
m_boldFont = m_normalFont;
|
m_boldFont = m_normalFont;
|
||||||
m_boldFont.setBold(true);
|
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.");
|
tr("Date of the most recent update of the message.") << tr("Contents of the message.");
|
||||||
}
|
}
|
||||||
|
|
||||||
Qt::ItemFlags MessagesModel::flags(const QModelIndex &idx) const {
|
Qt::ItemFlags MessagesModel::flags(const QModelIndex &index) const {
|
||||||
Q_UNUSED(idx)
|
Q_UNUSED(index)
|
||||||
|
|
||||||
#if QT_VERSION >= 0x050000
|
#if QT_VERSION >= 0x050000
|
||||||
if (m_isInEditingMode) {
|
if (m_isInEditingMode) {
|
||||||
|
@ -123,39 +122,38 @@ QVariant MessagesModel::data(int row, int column, int role) const {
|
||||||
return data(index(row, column), role);
|
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) {
|
switch (role) {
|
||||||
// Human readable data for viewing.
|
// Human readable data for viewing.
|
||||||
case Qt::DisplayRole: {
|
case Qt::DisplayRole: {
|
||||||
int index_column = idx.column();
|
int index_column = index.column();
|
||||||
if (index_column != MSG_DB_IMPORTANT_INDEX &&
|
if (index_column != MSG_DB_IMPORTANT_INDEX &&
|
||||||
index_column != MSG_DB_READ_INDEX) {
|
index_column != MSG_DB_READ_INDEX) {
|
||||||
return QSqlTableModel::data(idx, role);
|
return QSqlTableModel::data(index, role);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
return QVariant();
|
return QVariant();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Return RAW data for EditRole.
|
|
||||||
case Qt::EditRole:
|
case Qt::EditRole:
|
||||||
return QSqlTableModel::data(idx, role);
|
return QSqlTableModel::data(index, role);
|
||||||
|
|
||||||
case Qt::FontRole:
|
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_normalFont :
|
||||||
m_boldFont;
|
m_boldFont;
|
||||||
|
|
||||||
case Qt::DecorationRole: {
|
case Qt::DecorationRole: {
|
||||||
int index_column = idx.column();
|
int index_column = index.column();
|
||||||
|
|
||||||
if (index_column == MSG_DB_READ_INDEX) {
|
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_readIcon :
|
||||||
m_unreadIcon;
|
m_unreadIcon;
|
||||||
}
|
}
|
||||||
else if (index_column == MSG_DB_IMPORTANT_INDEX) {
|
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 :
|
m_favoriteIcon :
|
||||||
QVariant();
|
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
|
#if QT_VERSION >= 0x050000
|
||||||
m_isInEditingMode = true;
|
m_isInEditingMode = true;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
bool set_data_result = QSqlTableModel::setData(idx, value, role);
|
bool set_data_result = QSqlTableModel::setData(index, value, role);
|
||||||
|
|
||||||
#if QT_VERSION >= 0x050000
|
#if QT_VERSION >= 0x050000
|
||||||
m_isInEditingMode = false;
|
m_isInEditingMode = false;
|
||||||
|
@ -185,8 +184,16 @@ bool MessagesModel::setData(const QModelIndex &idx, const QVariant &value, int r
|
||||||
}
|
}
|
||||||
|
|
||||||
bool MessagesModel::setMessageRead(int row_index, int read) {
|
bool MessagesModel::setMessageRead(int row_index, int read) {
|
||||||
if (!database().transaction()) {
|
if (data(row_index, MSG_DB_READ_INDEX, Qt::EditRole).toInt() == read) {
|
||||||
qWarning("Starting transaction for batch message read change.");
|
// 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;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -196,15 +203,19 @@ bool MessagesModel::setMessageRead(int row_index, int read) {
|
||||||
|
|
||||||
if (!working_change) {
|
if (!working_change) {
|
||||||
// If rewriting in the model failed, then cancel all actions.
|
// 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;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
QSqlDatabase db_handle = database();
|
|
||||||
int message_id;
|
int message_id;
|
||||||
QSqlQuery query_delete_msg(db_handle);
|
QSqlQuery query_delete_msg(db_handle);
|
||||||
if (!query_delete_msg.prepare("UPDATE messages SET read = :read "
|
if (!query_delete_msg.prepare("UPDATE messages SET read = :read "
|
||||||
"WHERE id = :id")) {
|
"WHERE id = :id")) {
|
||||||
qWarning("Query preparation failed for message read change.");
|
qWarning("Query preparation failed for message read change.");
|
||||||
|
|
||||||
|
db_handle.rollback();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -228,8 +239,10 @@ bool MessagesModel::setMessageRead(int row_index, int read) {
|
||||||
}
|
}
|
||||||
|
|
||||||
bool MessagesModel::switchMessageImportance(int row_index) {
|
bool MessagesModel::switchMessageImportance(int row_index) {
|
||||||
if (!database().transaction()) {
|
QSqlDatabase db_handle = database();
|
||||||
qWarning("Starting transaction for batch message importance switch failed.");
|
|
||||||
|
if (!db_handle.transaction()) {
|
||||||
|
qWarning("Starting transaction for message importance switch failed.");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -243,15 +256,19 @@ bool MessagesModel::switchMessageImportance(int row_index) {
|
||||||
|
|
||||||
if (!working_change) {
|
if (!working_change) {
|
||||||
// If rewriting in the model failed, then cancel all actions.
|
// 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;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
QSqlDatabase db_handle = database();
|
|
||||||
int message_id;
|
int message_id;
|
||||||
QSqlQuery query_delete_msg(db_handle);
|
QSqlQuery query_delete_msg(db_handle);
|
||||||
if (!query_delete_msg.prepare("UPDATE messages SET important = :important "
|
if (!query_delete_msg.prepare("UPDATE messages SET important = :important "
|
||||||
"WHERE id = :id")) {
|
"WHERE id = :id")) {
|
||||||
qWarning("Query preparation failed for message importance switch.");
|
qWarning("Query preparation failed for message importance switch.");
|
||||||
|
|
||||||
|
db_handle.rollback();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -275,17 +292,20 @@ bool MessagesModel::switchMessageImportance(int row_index) {
|
||||||
}
|
}
|
||||||
|
|
||||||
bool MessagesModel::switchBatchMessageImportance(const QModelIndexList &messages) {
|
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.");
|
qWarning("Starting transaction for batch message importance switch failed.");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
QSqlDatabase db_handle = database();
|
|
||||||
int message_id, importance;
|
int message_id, importance;
|
||||||
QSqlQuery query_delete_msg(db_handle);
|
QSqlQuery query_delete_msg(db_handle);
|
||||||
if (!query_delete_msg.prepare("UPDATE messages SET important = :important "
|
if (!query_delete_msg.prepare("UPDATE messages SET important = :important "
|
||||||
"WHERE id = :id")) {
|
"WHERE id = :id")) {
|
||||||
qWarning("Query preparation failed for message importance switch.");
|
qWarning("Query preparation failed for message importance switch.");
|
||||||
|
|
||||||
|
db_handle.rollback();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -312,17 +332,20 @@ bool MessagesModel::switchBatchMessageImportance(const QModelIndexList &messages
|
||||||
}
|
}
|
||||||
|
|
||||||
bool MessagesModel::setBatchMessagesDeleted(const QModelIndexList &messages, int deleted) {
|
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.");
|
qWarning("Starting transaction for batch message deletion.");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
QSqlDatabase db_handle = database();
|
|
||||||
int message_id;
|
int message_id;
|
||||||
QSqlQuery query_delete_msg(db_handle);
|
QSqlQuery query_delete_msg(db_handle);
|
||||||
if (!query_delete_msg.prepare("UPDATE messages SET deleted = :deleted "
|
if (!query_delete_msg.prepare("UPDATE messages SET deleted = :deleted "
|
||||||
"WHERE id = :id")) {
|
"WHERE id = :id")) {
|
||||||
qWarning("Query preparation failed for message deletion.");
|
qWarning("Query preparation failed for message deletion.");
|
||||||
|
|
||||||
|
db_handle.rollback();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -346,17 +369,20 @@ bool MessagesModel::setBatchMessagesDeleted(const QModelIndexList &messages, int
|
||||||
}
|
}
|
||||||
|
|
||||||
bool MessagesModel::setBatchMessagesRead(const QModelIndexList &messages, int read) {
|
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.");
|
qWarning("Starting transaction for batch message read change.");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
QSqlDatabase db_handle = database();
|
|
||||||
int message_id;
|
int message_id;
|
||||||
QSqlQuery query_delete_msg(db_handle);
|
QSqlQuery query_delete_msg(db_handle);
|
||||||
if (!query_delete_msg.prepare("UPDATE messages SET read = :read "
|
if (!query_delete_msg.prepare("UPDATE messages SET read = :read "
|
||||||
"WHERE id = :id")) {
|
"WHERE id = :id")) {
|
||||||
qWarning("Query preparation failed for message read change.");
|
qWarning("Query preparation failed for message read change.");
|
||||||
|
|
||||||
|
db_handle.rollback();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -13,16 +13,16 @@
|
||||||
// NOTE: This is primarily used for transfering data
|
// NOTE: This is primarily used for transfering data
|
||||||
// to WebBrowser responsible for displaying of messages.
|
// to WebBrowser responsible for displaying of messages.
|
||||||
class Message {
|
class Message {
|
||||||
|
friend class WebBrowser;
|
||||||
|
friend class MessagesModel;
|
||||||
|
friend class MessagesView;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QString m_title;
|
QString m_title;
|
||||||
QString m_url;
|
QString m_url;
|
||||||
QString m_author;
|
QString m_author;
|
||||||
QString m_contents;
|
QString m_contents;
|
||||||
QDateTime m_updated;
|
QDateTime m_updated;
|
||||||
|
|
||||||
friend class WebBrowser;
|
|
||||||
friend class MessagesModel;
|
|
||||||
friend class MessagesView;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -35,11 +35,11 @@ class MessagesModel : public QSqlTableModel {
|
||||||
virtual ~MessagesModel();
|
virtual ~MessagesModel();
|
||||||
|
|
||||||
// Model implementation.
|
// Model implementation.
|
||||||
bool setData(const QModelIndex &idx, const QVariant &value, int role = Qt::EditRole);
|
bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole);
|
||||||
QVariant data(const QModelIndex &idx, int role = Qt::DisplayRole) const;
|
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;
|
||||||
QVariant data(int row, int column, 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;
|
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:
|
public:
|
||||||
// Sets up all icons which are used directly by this model.
|
// Sets up all icons which are used directly by this model.
|
||||||
|
|
Loading…
Add table
Reference in a new issue