Work on feeds model/view.
This commit is contained in:
parent
5742c60051
commit
f85de2c819
@ -36,6 +36,17 @@ CREATE TABLE IF NOT EXISTS Feeds (
|
||||
type INTEGER NOT NULL
|
||||
);
|
||||
-- !
|
||||
DROP TABLE IF EXISTS FeedsData;
|
||||
-- !
|
||||
CREATE TABLE IF NOT EXISTS FeedsData (
|
||||
id INTEGER NOT NULL,
|
||||
key TEXT NOT NULL,
|
||||
value TEXT,
|
||||
|
||||
PRIMARY KEY (id, key),
|
||||
FOREIGN KEY (id) REFERENCES Feeds (id)
|
||||
);
|
||||
-- !
|
||||
DROP TABLE IF EXISTS Messages;
|
||||
-- !
|
||||
CREATE TABLE IF NOT EXISTS Messages (
|
||||
|
@ -64,13 +64,9 @@
|
||||
#define MSG_DB_DUPDATED_INDEX 9
|
||||
#define MSG_DB_CONTENTS_INDEX 10
|
||||
|
||||
// Indexes of columns as they are USED IN THE MODEL for MESSAGES.
|
||||
#define MSG_MODEL_READ_INDEX 0
|
||||
#define MSG_MODEL_IMPORTANT_INDEX 1
|
||||
#define MSG_MODEL_TITLE_INDEX 2
|
||||
#define MSG_MODEL_AUTHOR_INDEX 3
|
||||
#define MSG_MODEL_DCREATED_INDEX 4
|
||||
#define MSG_MODEL_DUPDATED_INDEX 5
|
||||
// Indexes of columns for feed models.
|
||||
#define FDS_TITLE_INDEX 0
|
||||
#define FDS_COUNTS_INDEX 1
|
||||
|
||||
#if defined(Q_OS_LINUX)
|
||||
#define APP_DESKTOP_ENTRY_PATH "@DESKTOP_ENTRY_PATH@"
|
||||
|
@ -1,18 +1,23 @@
|
||||
#include "core/feedsmodel.h"
|
||||
#include "core/feedsmodelstandardcategory.h"
|
||||
#include "core/feedsmodelstandardfeed.h"
|
||||
#include "core/defs.h"
|
||||
#include "gui/iconthemefactory.h"
|
||||
|
||||
|
||||
FeedsModel::FeedsModel(QObject *parent) : QAbstractItemModel(parent) {
|
||||
m_rootItem = new FeedsModelRootItem(NULL);
|
||||
m_rootItem = new FeedsModelRootItem();
|
||||
m_countsIcon = IconThemeFactory::getInstance()->fromTheme("mail-mark-unread");
|
||||
|
||||
FeedsModelStandardCategory *cat1 = new FeedsModelStandardCategory(m_rootItem);
|
||||
FeedsModelStandardCategory *cat2 = new FeedsModelStandardCategory(cat1);
|
||||
FeedsModelStandardFeed *feed1 = new FeedsModelStandardFeed(cat1);
|
||||
FeedsModelStandardFeed *feed2 = new FeedsModelStandardFeed(cat1);
|
||||
FeedsModelStandardFeed *feed3 = new FeedsModelStandardFeed(m_rootItem);
|
||||
FeedsModelStandardFeed *feed4 = new FeedsModelStandardFeed(cat2);
|
||||
FeedsModelStandardFeed *feed5 = new FeedsModelStandardFeed(cat2);
|
||||
m_headerData << tr("Title");
|
||||
|
||||
FeedsModelStandardCategory *cat1 = new FeedsModelStandardCategory();
|
||||
FeedsModelStandardCategory *cat2 = new FeedsModelStandardCategory();
|
||||
FeedsModelStandardFeed *feed1 = new FeedsModelStandardFeed();
|
||||
FeedsModelStandardFeed *feed2 = new FeedsModelStandardFeed();
|
||||
FeedsModelStandardFeed *feed3 = new FeedsModelStandardFeed();
|
||||
FeedsModelStandardFeed *feed4 = new FeedsModelStandardFeed();
|
||||
FeedsModelStandardFeed *feed5 = new FeedsModelStandardFeed();
|
||||
|
||||
cat1->appendChild(feed1);
|
||||
cat1->appendChild(feed2);
|
||||
@ -35,30 +40,41 @@ QVariant FeedsModel::data(const QModelIndex &index, int role) const {
|
||||
return QVariant();
|
||||
}
|
||||
|
||||
if (role != Qt::DisplayRole) {
|
||||
return QVariant();
|
||||
}
|
||||
|
||||
FeedsModelRootItem *item = static_cast<FeedsModelRootItem*>(index.internalPointer());
|
||||
|
||||
return item->data(index.column(), Qt::DisplayRole);
|
||||
return item->data(index.column(), role);
|
||||
}
|
||||
|
||||
QVariant FeedsModel::headerData(int section,
|
||||
Qt::Orientation orientation,
|
||||
int role) const {
|
||||
if (orientation == Qt::Horizontal) {
|
||||
switch (role) {
|
||||
case Qt::DisplayRole:
|
||||
return "aaa";
|
||||
|
||||
default:
|
||||
return QVariant();
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (orientation != Qt::Horizontal) {
|
||||
return QVariant();
|
||||
}
|
||||
|
||||
switch (role) {
|
||||
case Qt::DisplayRole:
|
||||
if (section == FDS_TITLE_INDEX) {
|
||||
return m_headerData.at(FDS_TITLE_INDEX);
|
||||
}
|
||||
else {
|
||||
return QVariant();
|
||||
}
|
||||
|
||||
case Qt::ToolTipRole:
|
||||
break;
|
||||
|
||||
case Qt::DecorationRole:
|
||||
if (section == FDS_COUNTS_INDEX) {
|
||||
return m_countsIcon;
|
||||
}
|
||||
else {
|
||||
return QVariant();
|
||||
}
|
||||
|
||||
default:
|
||||
return QVariant();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
QModelIndex FeedsModel::index(int row, int column, const QModelIndex &parent) const {
|
||||
|
@ -2,6 +2,7 @@
|
||||
#define FEEDSMODEL_H
|
||||
|
||||
#include <QAbstractItemModel>
|
||||
#include <QIcon>
|
||||
|
||||
|
||||
class FeedsModelRootItem;
|
||||
@ -25,6 +26,8 @@ class FeedsModel : public QAbstractItemModel {
|
||||
|
||||
private:
|
||||
FeedsModelRootItem *m_rootItem;
|
||||
QList<QString> m_headerData;
|
||||
QIcon m_countsIcon;
|
||||
|
||||
};
|
||||
|
||||
|
@ -6,5 +6,4 @@ FeedsModelCategory::FeedsModelCategory(FeedsModelRootItem *parent_item)
|
||||
}
|
||||
|
||||
FeedsModelCategory::~FeedsModelCategory() {
|
||||
qDebug("Destroying BaseFeedsModelCategory instance.");
|
||||
}
|
||||
|
@ -9,7 +9,7 @@
|
||||
class FeedsModelCategory : public FeedsModelRootItem {
|
||||
public:
|
||||
// Constructors and destructors
|
||||
explicit FeedsModelCategory(FeedsModelRootItem *parent_item);
|
||||
explicit FeedsModelCategory(FeedsModelRootItem *parent_item = NULL);
|
||||
virtual ~FeedsModelCategory();
|
||||
|
||||
};
|
||||
|
@ -6,7 +6,6 @@ FeedsModelFeed::FeedsModelFeed(FeedsModelRootItem *parent_item)
|
||||
}
|
||||
|
||||
FeedsModelFeed::~FeedsModelFeed() {
|
||||
qDebug("Destroying FeedsModelFeed instance.");
|
||||
}
|
||||
|
||||
int FeedsModelFeed::childCount() const {
|
||||
|
@ -9,8 +9,16 @@
|
||||
class FeedsModelFeed : public FeedsModelRootItem
|
||||
{
|
||||
public:
|
||||
// Describes possible types of feeds.
|
||||
// NOTE: This is equivalent to attribute Feeds(type).
|
||||
enum Type {
|
||||
StandardRss = 0,
|
||||
StandardRdf = 1,
|
||||
StandardAtom = 2
|
||||
};
|
||||
|
||||
// Constructors and destructors.
|
||||
explicit FeedsModelFeed(FeedsModelRootItem *parent_item);
|
||||
explicit FeedsModelFeed(FeedsModelRootItem *parent_item = NULL);
|
||||
virtual ~FeedsModelFeed();
|
||||
|
||||
int childCount() const;
|
||||
|
@ -16,12 +16,17 @@ FeedsModelRootItem *FeedsModelRootItem::parent() {
|
||||
return m_parentItem;
|
||||
}
|
||||
|
||||
void FeedsModelRootItem::setParent(FeedsModelRootItem *parent_item) {
|
||||
m_parentItem = parent_item;
|
||||
}
|
||||
|
||||
FeedsModelRootItem *FeedsModelRootItem::child(int row) {
|
||||
return m_childItems.value(row);
|
||||
}
|
||||
|
||||
void FeedsModelRootItem::appendChild(FeedsModelRootItem *child) {
|
||||
m_childItems.append(child);
|
||||
child->setParent(this);
|
||||
}
|
||||
|
||||
int FeedsModelRootItem::columnCount() const {
|
||||
|
@ -13,9 +13,10 @@ class FeedsModelRootItem {
|
||||
|
||||
public:
|
||||
// Constructors and destructors.
|
||||
explicit FeedsModelRootItem(FeedsModelRootItem *parent_item);
|
||||
explicit FeedsModelRootItem(FeedsModelRootItem *parent_item = NULL);
|
||||
virtual ~FeedsModelRootItem();
|
||||
|
||||
virtual void setParent(FeedsModelRootItem *parent_item);
|
||||
virtual FeedsModelRootItem *parent();
|
||||
virtual FeedsModelRootItem *child(int row);
|
||||
virtual void appendChild(FeedsModelRootItem *child);
|
||||
|
@ -12,7 +12,7 @@
|
||||
class FeedsModelStandardCategory : public FeedsModelCategory {
|
||||
public:
|
||||
// Constructors and destructors.
|
||||
explicit FeedsModelStandardCategory(FeedsModelRootItem *parent_item);
|
||||
explicit FeedsModelStandardCategory(FeedsModelRootItem *parent_item = NULL);
|
||||
virtual ~FeedsModelStandardCategory();
|
||||
|
||||
QVariant data(int column, int role) const;
|
||||
|
@ -1,6 +1,8 @@
|
||||
#include <QVariant>
|
||||
|
||||
#include "feedsmodelstandardfeed.h"
|
||||
#include "core/defs.h"
|
||||
#include "gui/iconthemefactory.h"
|
||||
#include "core/feedsmodelstandardfeed.h"
|
||||
|
||||
|
||||
FeedsModelStandardFeed::FeedsModelStandardFeed(FeedsModelRootItem *parent_item)
|
||||
@ -12,10 +14,29 @@ FeedsModelStandardFeed::~FeedsModelStandardFeed() {
|
||||
}
|
||||
|
||||
QVariant FeedsModelStandardFeed::data(int column, int role) const {
|
||||
if (role == Qt::DisplayRole) {
|
||||
return "bbb";
|
||||
}
|
||||
else {
|
||||
return QVariant();
|
||||
switch (role) {
|
||||
case Qt::DisplayRole:
|
||||
if (column == FDS_TITLE_INDEX) {
|
||||
return m_title;
|
||||
}
|
||||
else if (column == FDS_COUNTS_INDEX) {
|
||||
return QString("(%1)").arg(QString::number(m_unreadCount));
|
||||
}
|
||||
|
||||
case Qt::DecorationRole:
|
||||
return column == FDS_TITLE_INDEX ?
|
||||
m_icon :
|
||||
QVariant();
|
||||
|
||||
case Qt::TextAlignmentRole:
|
||||
if (column == FDS_COUNTS_INDEX) {
|
||||
return Qt::AlignRight;
|
||||
}
|
||||
else {
|
||||
return QVariant();
|
||||
}
|
||||
|
||||
default:
|
||||
return QVariant();
|
||||
}
|
||||
}
|
||||
|
@ -1,19 +1,33 @@
|
||||
#ifndef FEEDSMODELSTANDARDFEED_H
|
||||
#define FEEDSMODELSTANDARDFEED_H
|
||||
|
||||
#include <QDateTime>
|
||||
|
||||
#include "core/feedsmodelfeed.h"
|
||||
|
||||
|
||||
// Represents STANDARD RSS/RDF/ATOM feed with no
|
||||
// online synchronization services (NO TT-RSS, NO FEEDLY).
|
||||
// So, parent item is either root item or category.
|
||||
class FeedsModelStandardFeed : public FeedsModelFeed {
|
||||
public:
|
||||
// Constructors and destructors.
|
||||
explicit FeedsModelStandardFeed(FeedsModelRootItem *parent_item);
|
||||
explicit FeedsModelStandardFeed(FeedsModelRootItem *parent_item = NULL);
|
||||
virtual ~FeedsModelStandardFeed();
|
||||
|
||||
QVariant data(int column, int role) const;
|
||||
|
||||
|
||||
private:
|
||||
QString m_title;
|
||||
QDateTime m_creationDate;
|
||||
QString m_encoding;
|
||||
QString m_url;
|
||||
QString m_description;
|
||||
QString m_language;
|
||||
|
||||
int m_totalCount;
|
||||
int m_unreadCount;
|
||||
};
|
||||
|
||||
#endif // FEEDSMODELSTANDARDFEED_H
|
||||
|
@ -1,6 +1,9 @@
|
||||
#include <QHeaderView>
|
||||
|
||||
#include "gui/feedsview.h"
|
||||
#include "core/feedsmodel.h"
|
||||
#include "core/feedsproxymodel.h"
|
||||
#include "core/defs.h"
|
||||
|
||||
|
||||
FeedsView::FeedsView(QWidget *parent) : QTreeView(parent) {
|
||||
@ -8,6 +11,24 @@ FeedsView::FeedsView(QWidget *parent) : QTreeView(parent) {
|
||||
m_sourceModel = m_proxyModel->sourceModel();
|
||||
|
||||
setModel(m_proxyModel);
|
||||
|
||||
#if QT_VERSION >= 0x050000
|
||||
// Setup column resize strategies.
|
||||
header()->setSectionResizeMode(FDS_TITLE_INDEX, QHeaderView::Interactive);
|
||||
header()->setSectionResizeMode(FDS_COUNTS_INDEX, QHeaderView::ResizeToContents);
|
||||
#else
|
||||
// Setup column resize strategies.
|
||||
header()->setResizeMode(FDS_TITLE_INDEX, QHeaderView::Interactive);
|
||||
header()->setResizeMode(FDS_COUNTS_INDEX, QHeaderView::ResizeToContents);
|
||||
#endif
|
||||
|
||||
header()->setStretchLastSection(false);
|
||||
setUniformRowHeights(true);
|
||||
setAcceptDrops(false);
|
||||
setDragEnabled(false);
|
||||
setDragDropMode(QAbstractItemView::NoDragDrop);
|
||||
setAllColumnsShowFocus(true);
|
||||
setSelectionMode(QAbstractItemView::ExtendedSelection);
|
||||
}
|
||||
|
||||
FeedsView::~FeedsView() {
|
||||
|
Loading…
x
Reference in New Issue
Block a user