Icons now fully changeable for categories.
This commit is contained in:
parent
85b9ef8d7b
commit
0ba0e2fc18
10 changed files with 128 additions and 16 deletions
|
@ -64,9 +64,9 @@ CREATE TABLE IF NOT EXISTS Messages (
|
|||
FOREIGN KEY (feed) REFERENCES Feeds (id)
|
||||
);
|
||||
-- !
|
||||
INSERT INTO Categories (id, parent_id, title, description, date_created, type) VALUES (1, -1, 'Linux', 'Collections of GNU/Linux-related feeds.', 1388678961000, 0);
|
||||
INSERT INTO Categories (id, parent_id, title, description, date_created, type, icon) VALUES (1, -1, 'Linux', 'Collections of GNU/Linux-related feeds.', 1388678961000, 0, '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');
|
||||
-- !
|
||||
INSERT INTO Categories (id, parent_id, title, description, date_created, type) VALUES (2, -1, 'RSS Guard', 'News and updates on RSS Guard.', 1388678961000, 0);
|
||||
INSERT INTO Categories (id, parent_id, title, description, date_created, type, icon) VALUES (2, -1, 'RSS Guard', 'News and updates on RSS Guard.', 1388678961000, 0, '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');
|
||||
-- !
|
||||
INSERT INTO Feeds (title, description, date_created, category, encoding, url, type) VALUES ('Linux Today', 'Linux Today - Linux News on Internet Time.', 1388678961000, 1, 'UTF-8', 'http://feeds.feedburner.com/linuxtoday/linux?format=xml', 1);
|
||||
-- !
|
||||
|
|
|
@ -70,9 +70,7 @@ QVariant FeedsModelStandardCategory::data(int column, int role) const {
|
|||
|
||||
case Qt::DecorationRole:
|
||||
if (column == FDS_MODEL_TITLE_INDEX) {
|
||||
return m_icon.isNull() ?
|
||||
IconThemeFactory::instance()->fromTheme("folder-black") :
|
||||
m_icon;
|
||||
return m_icon;
|
||||
}
|
||||
else {
|
||||
return QVariant();
|
||||
|
|
|
@ -64,9 +64,7 @@ QVariant FeedsModelStandardFeed::data(int column, int role) const {
|
|||
|
||||
case Qt::DecorationRole:
|
||||
if (column == FDS_MODEL_TITLE_INDEX) {
|
||||
return m_icon.isNull() ?
|
||||
IconThemeFactory::instance()->fromTheme("application-rss+xml") :
|
||||
m_icon;
|
||||
return m_icon;
|
||||
}
|
||||
else {
|
||||
return QVariant();
|
||||
|
|
|
@ -86,12 +86,12 @@ QSettings::Status Settings::setupSettings() {
|
|||
// a upravovat dané vlastnosti
|
||||
// do FOrmSettings Webbrowser & proxy pridat tab "Advanced" a tam
|
||||
// naflakat vsecky zajimavy attributy
|
||||
QWebSettings::globalSettings()->setAttribute(QWebSettings::DnsPrefetchEnabled,
|
||||
/*QWebSettings::globalSettings()->setAttribute(QWebSettings::DnsPrefetchEnabled,
|
||||
true);
|
||||
QWebSettings::globalSettings()->setAttribute(QWebSettings::AutoLoadImages,
|
||||
false);
|
||||
QWebSettings::globalSettings()->setAttribute(QWebSettings::JavascriptEnabled,
|
||||
false);
|
||||
false);*/
|
||||
|
||||
qDebug("Initializing settings in '%s' (non-portable way).",
|
||||
qPrintable(QDir::toNativeSeparators(home_path_file)));
|
||||
|
|
|
@ -104,6 +104,9 @@ void FeedsView::addNewStandardCategory() {
|
|||
}
|
||||
|
||||
delete form_pointer.data();
|
||||
|
||||
// Changes are done, unlock the update master lock.
|
||||
SystemFactory::instance()->applicationCloseLock()->unlock();
|
||||
}
|
||||
|
||||
void FeedsView::editStandardCategory(FeedsModelStandardCategory *category) {
|
||||
|
@ -161,6 +164,8 @@ void FeedsView::editSelectedItem() {
|
|||
// Feed is selected.
|
||||
}
|
||||
|
||||
// Changes are done, unlock the update master lock.
|
||||
SystemFactory::instance()->applicationCloseLock()->unlock();
|
||||
}
|
||||
|
||||
void FeedsView::deleteSelectedItem() {
|
||||
|
@ -188,6 +193,8 @@ void FeedsView::deleteSelectedItem() {
|
|||
QItemSelectionModel *selection_model = selectionModel();
|
||||
|
||||
if (!current_index.isValid()) {
|
||||
// Changes are done, unlock the update master lock and exit.
|
||||
SystemFactory::instance()->applicationCloseLock()->unlock();
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -207,6 +214,9 @@ void FeedsView::deleteSelectedItem() {
|
|||
// Item WAS NOT removed, either database-related error occurred
|
||||
// or update is undergoing.
|
||||
}
|
||||
|
||||
// Changes are done, unlock the update master lock.
|
||||
SystemFactory::instance()->applicationCloseLock()->unlock();
|
||||
}
|
||||
|
||||
void FeedsView::markSelectedFeedsReadStatus(int read) {
|
||||
|
|
|
@ -8,12 +8,16 @@
|
|||
#include "gui/iconthemefactory.h"
|
||||
#include "gui/feedsview.h"
|
||||
#include "gui/baselineedit.h"
|
||||
#include "gui/messagebox.h"
|
||||
|
||||
#include <QLineEdit>
|
||||
#include <QTextEdit>
|
||||
#include <QDialogButtonBox>
|
||||
#include <QToolButton>
|
||||
#include <QPushButton>
|
||||
#include <QMenu>
|
||||
#include <QAction>
|
||||
#include <QFileDialog>
|
||||
|
||||
|
||||
FormStandardCategoryDetails::FormStandardCategoryDetails(FeedsModel *model,
|
||||
|
@ -26,6 +30,7 @@ FormStandardCategoryDetails::FormStandardCategoryDetails(FeedsModel *model,
|
|||
|
||||
// Initialize text boxes.
|
||||
onTitleChanged(QString());
|
||||
onDescriptionChanged(QString());
|
||||
}
|
||||
|
||||
FormStandardCategoryDetails::~FormStandardCategoryDetails() {
|
||||
|
@ -33,10 +38,18 @@ FormStandardCategoryDetails::~FormStandardCategoryDetails() {
|
|||
}
|
||||
|
||||
void FormStandardCategoryDetails::createConnections() {
|
||||
// General connections.
|
||||
connect(m_ui->m_buttonBox, SIGNAL(accepted()),
|
||||
this, SLOT(apply()));
|
||||
connect(m_ui->m_txtTitle->lineEdit(), SIGNAL(textChanged(QString)),
|
||||
this, SLOT(onTitleChanged(QString)));
|
||||
connect(m_ui->m_txtDescription->lineEdit(), SIGNAL(textChanged(QString)),
|
||||
this, SLOT(onDescriptionChanged(QString)));
|
||||
|
||||
// Icon connections.
|
||||
connect(m_actionLoadIconFromFile, SIGNAL(triggered()), this, SLOT(onLoadIconFromFile()));
|
||||
connect(m_actionNoIcon, SIGNAL(triggered()), this, SLOT(onNoIconSelected()));
|
||||
connect(m_actionUseDefaultIcon, SIGNAL(triggered()), this, SLOT(onUseDefaultIcon()));
|
||||
}
|
||||
|
||||
void FormStandardCategoryDetails::setEditableCategory(FeedsModelStandardCategory *editable_category) {
|
||||
|
@ -88,7 +101,6 @@ void FormStandardCategoryDetails::apply() {
|
|||
}
|
||||
}
|
||||
else {
|
||||
// TODO: edit category
|
||||
if (m_feedsModel->editStandardCategory(m_editableCategory, new_category)) {
|
||||
accept();
|
||||
}
|
||||
|
@ -101,14 +113,49 @@ void FormStandardCategoryDetails::apply() {
|
|||
void FormStandardCategoryDetails::onTitleChanged(const QString &new_title){
|
||||
if (new_title.size() >= MIN_CATEGORY_NAME_LENGTH) {
|
||||
m_ui->m_buttonBox->button(QDialogButtonBox::Ok)->setEnabled(true);
|
||||
m_ui->m_txtTitle->setStatus(LineEditWithStatus::Ok, tr("This category name is ok."));
|
||||
m_ui->m_txtTitle->setStatus(LineEditWithStatus::Ok, tr("Category name is ok."));
|
||||
}
|
||||
else {
|
||||
m_ui->m_buttonBox->button(QDialogButtonBox::Ok)->setEnabled(false);
|
||||
m_ui->m_txtTitle->setStatus(LineEditWithStatus::Error, tr("This category name is too short."));
|
||||
m_ui->m_txtTitle->setStatus(LineEditWithStatus::Error, tr("Category name is too short."));
|
||||
}
|
||||
}
|
||||
|
||||
void FormStandardCategoryDetails::onDescriptionChanged(const QString &new_description) {
|
||||
if (new_description.isEmpty()) {
|
||||
m_ui->m_txtDescription->setStatus(LineEditWithStatus::Warning, tr("Please, enter some description."));
|
||||
}
|
||||
else {
|
||||
m_ui->m_txtDescription->setStatus(LineEditWithStatus::Ok, tr("The description os ok."));
|
||||
}
|
||||
}
|
||||
|
||||
void FormStandardCategoryDetails::onNoIconSelected() {
|
||||
m_ui->m_btnIcon->setIcon(QIcon());
|
||||
}
|
||||
|
||||
void FormStandardCategoryDetails::onLoadIconFromFile() {
|
||||
QFileDialog dialog(this, tr("Select icon file for the category"),
|
||||
QDir::homePath(), tr("Images (*.bmp *.jpg *.jpeg *.png *.svg *.tga)"));
|
||||
dialog.setFileMode(QFileDialog::ExistingFile);
|
||||
dialog.setWindowIcon(IconThemeFactory::instance()->fromTheme("image-x-generic"));
|
||||
dialog.setOptions(QFileDialog::DontUseNativeDialog | QFileDialog::ReadOnly);
|
||||
dialog.setViewMode(QFileDialog::Detail);
|
||||
dialog.setLabelText(QFileDialog::Accept, tr("Select icon"));
|
||||
dialog.setLabelText(QFileDialog::Reject, tr("Cancel"));
|
||||
dialog.setLabelText(QFileDialog::LookIn, tr("Look in:"));
|
||||
dialog.setLabelText(QFileDialog::FileName, tr("Icon name:"));
|
||||
dialog.setLabelText(QFileDialog::FileType, tr("Icon type:"));
|
||||
|
||||
if (dialog.exec() == QDialog::Accepted) {
|
||||
m_ui->m_btnIcon->setIcon(QIcon(dialog.selectedFiles().value(0)));
|
||||
}
|
||||
}
|
||||
|
||||
void FormStandardCategoryDetails::onUseDefaultIcon() {
|
||||
m_ui->m_btnIcon->setIcon(IconThemeFactory::instance()->fromTheme("folder-black"));
|
||||
}
|
||||
|
||||
void FormStandardCategoryDetails::initialize() {
|
||||
m_ui = new Ui::FormStandardCategoryDetails();
|
||||
m_ui->setupUi(this);
|
||||
|
@ -117,7 +164,28 @@ void FormStandardCategoryDetails::initialize() {
|
|||
setWindowFlags(Qt::MSWindowsFixedSizeDialogHint | Qt::Dialog);
|
||||
setWindowIcon(IconThemeFactory::instance()->fromTheme("document-new"));
|
||||
|
||||
// Setup button box.
|
||||
m_ui->m_buttonBox->button(QDialogButtonBox::Ok)->setEnabled(false);
|
||||
|
||||
#if !defined(Q_OS_WIN)
|
||||
MessageBox::iconify(m_ui->m_buttonBox);
|
||||
#endif
|
||||
|
||||
// Setup menu & actions for icon selection.
|
||||
m_iconMenu = new QMenu(tr("Icon selection"), this);
|
||||
m_actionLoadIconFromFile = new QAction(IconThemeFactory::instance()->fromTheme("image-x-generic"),
|
||||
tr("Load icon from file..."),
|
||||
this);
|
||||
m_actionNoIcon = new QAction(IconThemeFactory::instance()->fromTheme("edit-delete"),
|
||||
tr("No icon"),
|
||||
this);
|
||||
m_actionUseDefaultIcon = new QAction(IconThemeFactory::instance()->fromTheme("folder-black"),
|
||||
tr("Use default icon"),
|
||||
this);
|
||||
m_iconMenu->addAction(m_actionLoadIconFromFile);
|
||||
m_iconMenu->addAction(m_actionUseDefaultIcon);
|
||||
m_iconMenu->addAction(m_actionNoIcon);
|
||||
m_ui->m_btnIcon->setMenu(m_iconMenu);
|
||||
}
|
||||
|
||||
void FormStandardCategoryDetails::loadCategories(const QList<FeedsModelCategory*> categories,
|
||||
|
|
|
@ -14,6 +14,8 @@ class FeedsModelCategory;
|
|||
class FeedsModelStandardCategory;
|
||||
class FeedsModel;
|
||||
class FeedsModelRootItem;
|
||||
class QMenu;
|
||||
class QAction;
|
||||
|
||||
|
||||
class FormStandardCategoryDetails : public QDialog {
|
||||
|
@ -42,10 +44,17 @@ class FormStandardCategoryDetails : public QDialog {
|
|||
int exec(FeedsModelStandardCategory *input_category);
|
||||
|
||||
protected slots:
|
||||
// Applies changes.
|
||||
void apply();
|
||||
|
||||
// Trigerred when title/description changes.
|
||||
void onTitleChanged(const QString &new_title);
|
||||
void onDescriptionChanged(const QString &new_description);
|
||||
|
||||
// Icon selectors.
|
||||
void onNoIconSelected();
|
||||
void onLoadIconFromFile();
|
||||
void onUseDefaultIcon();
|
||||
|
||||
protected:
|
||||
// Sets the category which will be edited.
|
||||
|
@ -66,6 +75,11 @@ class FormStandardCategoryDetails : public QDialog {
|
|||
Ui::FormStandardCategoryDetails *m_ui;
|
||||
FeedsModelStandardCategory *m_editableCategory;
|
||||
FeedsModel *m_feedsModel;
|
||||
|
||||
QMenu *m_iconMenu;
|
||||
QAction *m_actionLoadIconFromFile;
|
||||
QAction *m_actionUseDefaultIcon;
|
||||
QAction *m_actionNoIcon;
|
||||
};
|
||||
|
||||
#endif // FORMCATEGORYDETAILS_H
|
||||
|
|
|
@ -64,6 +64,12 @@
|
|||
</item>
|
||||
<item row="3" column="1">
|
||||
<widget class="QToolButton" name="m_btnIcon">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>40</width>
|
||||
|
@ -71,7 +77,22 @@
|
|||
</size>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string/>
|
||||
<string notr="true"/>
|
||||
</property>
|
||||
<property name="iconSize">
|
||||
<size>
|
||||
<width>20</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="popupMode">
|
||||
<enum>QToolButton::InstantPopup</enum>
|
||||
</property>
|
||||
<property name="autoRaise">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="arrowType">
|
||||
<enum>Qt::NoArrow</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
|
|
|
@ -7,6 +7,8 @@ IconFactory::IconFactory() {
|
|||
}
|
||||
|
||||
QIcon IconFactory::fromByteArray(QByteArray array) {
|
||||
array = QByteArray::fromBase64(array);
|
||||
|
||||
QIcon icon;
|
||||
QBuffer buffer(&array);
|
||||
buffer.open(QIODevice::ReadOnly);
|
||||
|
@ -27,5 +29,5 @@ QByteArray IconFactory::toByteArray(const QIcon &icon) {
|
|||
out << icon;
|
||||
|
||||
buffer.close();
|
||||
return array;
|
||||
return array.toBase64();
|
||||
}
|
||||
|
|
|
@ -9,7 +9,8 @@ class IconFactory {
|
|||
explicit IconFactory();
|
||||
|
||||
public:
|
||||
// Used to store/retrieve QIcons from/to database.
|
||||
// Used to store/retrieve QIcons from/to database via Base64-encoded
|
||||
// byte array.
|
||||
static QIcon fromByteArray(QByteArray array);
|
||||
static QByteArray toByteArray(const QIcon &icon);
|
||||
};
|
||||
|
|
Loading…
Add table
Reference in a new issue