Work on categorie.

This commit is contained in:
Martin Rotter 2013-12-28 17:40:22 +01:00
parent d6ee69df0d
commit 5e031bc5e5
8 changed files with 90 additions and 37 deletions

View File

@ -11,6 +11,18 @@ FeedsModelCategory::FeedsModelCategory(FeedsModelRootItem *parent_item)
m_kind = FeedsModelRootItem::Category;
}
FeedsModelCategory::FeedsModelCategory(const FeedsModelCategory &other) {
m_kind = other.kind();
m_title = other.title();
m_id = other.id();
m_icon = other.icon();
m_childItems = other.childItems();
m_parentItem = other.parent();
m_type = other.type();
m_creationDate = other.creationDate();
m_description = other.description();
}
FeedsModelCategory::~FeedsModelCategory() {
}

View File

@ -23,6 +23,7 @@ class FeedsModelCategory : public FeedsModelRootItem {
// Constructors and destructors
explicit FeedsModelCategory(FeedsModelRootItem *parent_item = NULL);
explicit FeedsModelCategory(const FeedsModelCategory &other);
virtual ~FeedsModelCategory();
// Counts of messages.

View File

@ -15,7 +15,7 @@ FeedsModelRootItem::~FeedsModelRootItem() {
qDeleteAll(m_childItems);
}
FeedsModelRootItem *FeedsModelRootItem::parent() {
FeedsModelRootItem *FeedsModelRootItem::parent() const {
return m_parentItem;
}

View File

@ -21,7 +21,7 @@ class FeedsModelRootItem {
virtual ~FeedsModelRootItem();
// Basic operations.
virtual FeedsModelRootItem *parent();
virtual FeedsModelRootItem *parent() const;
virtual void setParent(FeedsModelRootItem *parent_item);
virtual FeedsModelRootItem *child(int row);
virtual void appendChild(FeedsModelRootItem *child);

View File

@ -62,17 +62,29 @@ void FeedsView::clearSelectedFeeds() {
}
void FeedsView::addNewCategory() {
QPointer<FormCategoryDetails> form_pointer = new FormCategoryDetails(this);
if (form_pointer.data()->exec() == QDialog::Accepted) {
// User submitted some new category.
QPointer<FormCategoryDetails> form_pointer = new FormCategoryDetails(m_sourceModel,
this);
FeedsModelCategory *output_item;
FeedsModelRootItem *parent_item;
if (form_pointer.data()->exec(NULL,
output_item,
parent_item) == QDialog::Accepted) {
// User submitted some new category and
// it now resides in output_item pointer,
// parent_item contains parent_that user selected for
// new category.
// TODO: Add new category to the model and to the database.
}
delete form_pointer.data();
}
void FeedsView::editSelectedCategory() {
// TODO: Implement this.
}
void FeedsView::markSelectedFeedsReadStatus(int read) {
m_sourceModel->markFeedsRead(selectedFeeds(), read);
updateCountsOfSelectedFeeds(false);

View File

@ -7,6 +7,7 @@
class FeedsModel;
class FeedsProxyModel;
class FeedsModelFeed;
class FeedsModelCategory;
class FeedsView : public QTreeView {
Q_OBJECT
@ -38,6 +39,7 @@ class FeedsView : public QTreeView {
// Category operators.
void addNewCategory();
void editSelectedCategory();
// Reloads counts for selected feeds.
void updateCountsOfSelectedFeeds(bool update_total_too = true);

View File

@ -10,41 +10,55 @@
#include <QPushButton>
FormCategoryDetails::FormCategoryDetails(FeedsView *parent)
: QDialog(parent) {
initialize(parent);
loadCategories(parent->sourceModel()->getAllCategories().values(),
parent->sourceModel()->rootItem());
FormCategoryDetails::FormCategoryDetails(FeedsModel *model, QWidget *parent)
: QDialog(parent), m_editableCategory(NULL) {
initialize();
loadCategories(model->getAllCategories().values(),
model->rootItem());
setWindowTitle(tr("Add new category"));
}
FormCategoryDetails::FormCategoryDetails(FeedsModelCategory *category,
FeedsView *parent)
: QDialog(parent) {
initialize(parent);
loadCategories(parent->sourceModel()->getAllCategories().values(),
parent->sourceModel()->rootItem());
setWindowTitle(tr("Edit existing category"));
}
FormCategoryDetails::~FormCategoryDetails() {
qDebug("Destroying FormCategoryDetails instance.");
}
void FormCategoryDetails::initialize(FeedsView *view) {
void FormCategoryDetails::setEditableCategory(FeedsModelCategory *editable_category) {
m_editableCategory = editable_category;
if (m_editableCategory != NULL) {
// TODO: Setup the dialog according to new category.
// so remove this category from category combobox!!
}
}
int FormCategoryDetails::exec(FeedsModelCategory *input_category,
FeedsModelCategory *output_item,
FeedsModelRootItem *parent_item) {
// TODO: Implement this.
setEditableCategory(input_category);
int result = QDialog::exec();
if (input_category == NULL) {
// User is adding new category.
}
else {
// User is editing existing category.
}
return result;
}
void FormCategoryDetails::initialize() {
m_ui = new Ui::FormCategoryDetails();
m_ui->setupUi(this);
// Set flags and attributes.
setWindowFlags(Qt::MSWindowsFixedSizeDialogHint | Qt::Dialog);
setWindowIcon(IconThemeFactory::getInstance()->fromTheme("document-new"));
// Add button for obtaining data about feed from internet.
m_btnObtainDetails = m_ui->m_buttonBox->addButton(tr("Get details via internet"),
QDialogButtonBox::ActionRole);
m_btnObtainDetails->setIcon(IconThemeFactory::getInstance()->fromTheme("document-save"));
}
void FormCategoryDetails::loadCategories(const QList<FeedsModelCategory *> categories,
@ -59,5 +73,4 @@ void FormCategoryDetails::loadCategories(const QList<FeedsModelCategory *> categ
category->title(),
category->id());
}
}

View File

@ -11,8 +11,8 @@ namespace Ui {
}
class FeedsModelCategory;
class FeedsModel;
class FeedsModelRootItem;
class FeedsView;
class FormCategoryDetails : public QDialog {
Q_OBJECT
@ -20,17 +20,31 @@ class FormCategoryDetails : public QDialog {
public:
// Constructors and destructors.
// This constructor is supposed to create new categories.
explicit FormCategoryDetails(FeedsView *parent = 0);
// This constructor is supposed to edit existing categories.
explicit FormCategoryDetails(FeedsModelCategory *category,
FeedsView *parent = 0);
explicit FormCategoryDetails(FeedsModel *model, QWidget *parent = 0);
// Destructor.
virtual ~FormCategoryDetails();
public slots:
// Start dialog execution. If result is QDialog::Accepted,
// then output_item contains added or edited category
// and parent_item contains parent item of newly
// created or edited category.
// NOTE: Newly ADDED category is NOT added to the model NOR
// in the database.
// NOTE: Newly EDITED category IS COPY of its original.
// SO NO ORIGINAL MODEL DATA ARE EDITED OR CHANGED.
int exec(FeedsModelCategory *input_category,
FeedsModelCategory *output_item,
FeedsModelRootItem *parent_item);
protected:
void initialize(FeedsView *view);
// Sets the category which will be edited.
// NOTE: This is used for editing categories.
void setEditableCategory(FeedsModelCategory *editable_category);
// Initializes the dialog.
void initialize();
// Loads categories into the dialog.
void loadCategories(const QList<FeedsModelCategory*> categories,
@ -38,8 +52,7 @@ class FormCategoryDetails : public QDialog {
private:
Ui::FormCategoryDetails *m_ui;
QPushButton *m_btnObtainDetails;
FeedsModelCategory *m_editableCategory;
};
#endif // FORMCATEGORYDETAILS_H