mirror of
https://github.com/YACReader/yacreader
synced 2025-05-28 03:10:27 -04:00
268 lines
6.0 KiB
C++
268 lines
6.0 KiB
C++
#include "reading_list_item.h"
|
||
#include "qnaturalsorting.h"
|
||
|
||
#include <QFileIconProvider>
|
||
|
||
#include "QsLog.h"
|
||
|
||
ListItem::ListItem(const QList<QVariant> &data)
|
||
: itemData(data)
|
||
{
|
||
}
|
||
|
||
int ListItem::columnCount()
|
||
{
|
||
return itemData.count();
|
||
}
|
||
|
||
QVariant ListItem::data(int column) const
|
||
{
|
||
return itemData.at(column);
|
||
}
|
||
|
||
qulonglong ListItem::getId() const
|
||
{
|
||
return 0;
|
||
}
|
||
|
||
//------------------------------------------------------
|
||
|
||
SpecialListItem::SpecialListItem(const QList<QVariant> &data)
|
||
: ListItem(data)
|
||
{
|
||
}
|
||
|
||
QIcon SpecialListItem::getIcon() const
|
||
{
|
||
if (itemData.count() > Id) {
|
||
QString id = itemData.at(Id).toString();
|
||
return YACReader::noHighlightedIcon(QString(":/images/lists/default_%1.png").arg(id));
|
||
}
|
||
|
||
QLOG_WARN() << "Icon for SpecialListItem not available";
|
||
|
||
return QIcon();
|
||
}
|
||
|
||
qulonglong SpecialListItem::getId() const
|
||
{
|
||
if (itemData.count() > Id) {
|
||
return itemData.at(Id).toInt();
|
||
}
|
||
|
||
return 0;
|
||
}
|
||
|
||
ReadingListModel::TypeSpecialList SpecialListItem::getType() const
|
||
{
|
||
if (itemData.count() > Id) {
|
||
int id = itemData.at(Id).toInt();
|
||
return (ReadingListModel::TypeSpecialList)id;
|
||
}
|
||
|
||
QLOG_WARN() << "TypeSpecialList not available";
|
||
|
||
return (ReadingListModel::TypeSpecialList)0;
|
||
}
|
||
|
||
//------------------------------------------------------
|
||
|
||
LabelItem::LabelItem(const QList<QVariant> &data)
|
||
: ListItem(data)
|
||
{
|
||
}
|
||
|
||
QIcon LabelItem::getIcon() const
|
||
{
|
||
if (itemData.count() > Color) {
|
||
QString color = itemData.at(Color).toString();
|
||
return YACReader::noHighlightedIcon(QString(":/images/lists/label_%1.png").arg(color).toLower());
|
||
}
|
||
|
||
QLOG_WARN() << "Icon for label item not available";
|
||
|
||
return QIcon();
|
||
}
|
||
|
||
YACReader::LabelColors LabelItem::colorid() const
|
||
{
|
||
if (itemData.count() > Ordering) {
|
||
return YACReader::LabelColors(itemData.at(Ordering).toInt());
|
||
}
|
||
|
||
QLOG_WARN() << "Label color for label item not available";
|
||
|
||
return (YACReader::LabelColors)0;
|
||
}
|
||
|
||
QString LabelItem::name() const
|
||
{
|
||
if (itemData.count() > Name) {
|
||
return itemData.at(Name).toString();
|
||
}
|
||
|
||
QLOG_WARN() << "Name for label item not available";
|
||
|
||
return "";
|
||
}
|
||
|
||
void LabelItem::setName(const QString &name)
|
||
{
|
||
if (itemData.count() > Name) {
|
||
itemData[Name] = name;
|
||
}
|
||
}
|
||
|
||
qulonglong LabelItem::getId() const
|
||
{
|
||
if (itemData.count() > Id) {
|
||
return YACReader::LabelColors(itemData.at(Id).toULongLong());
|
||
}
|
||
|
||
QLOG_WARN() << "Id for Label item not available";
|
||
|
||
return 0;
|
||
}
|
||
|
||
//------------------------------------------------------
|
||
|
||
ReadingListItem::ReadingListItem(const QList<QVariant> &data, ReadingListItem *p)
|
||
: ListItem(data), parent(p)
|
||
{
|
||
}
|
||
|
||
QIcon ReadingListItem::getIcon() const
|
||
{
|
||
if (parent->getId() == 0)
|
||
return YACReader::noHighlightedIcon(":/images/lists/list.png"); //top level list
|
||
else
|
||
#ifdef Q_OS_MAC
|
||
return QFileIconProvider().icon(QFileIconProvider::Folder);
|
||
#else
|
||
return YACReader::noHighlightedIcon(":/images/sidebar/folder.png"); //sublist
|
||
#endif
|
||
}
|
||
|
||
int ReadingListItem::childCount() const
|
||
{
|
||
return childItems.count();
|
||
}
|
||
|
||
ReadingListItem *ReadingListItem::child(int row)
|
||
{
|
||
return childItems.at(row);
|
||
}
|
||
|
||
//items are sorted by order
|
||
void ReadingListItem::appendChild(ReadingListItem *item)
|
||
{
|
||
item->parent = this;
|
||
|
||
if (childItems.isEmpty())
|
||
childItems.append(item);
|
||
else {
|
||
if (item->parent->getId() == 0) //sort by name, top level child
|
||
{
|
||
int i = 0;
|
||
while (i < childItems.length() && naturalSortLessThanCI(childItems.at(i)->name(), item->name()))
|
||
i++;
|
||
childItems.insert(i, item);
|
||
} else {
|
||
int i = 0;
|
||
while (i < childItems.length() && (childItems.at(i)->getOrdering() < item->getOrdering()))
|
||
i++;
|
||
childItems.insert(i, item);
|
||
}
|
||
|
||
/*ReadingListItem * last = childItems.back();
|
||
QString nameLast = last->data(1).toString(); //TODO usar info name si est<73> disponible, sino el nombre del fichero.....
|
||
QString nameCurrent = item->data(1).toString();
|
||
QList<FolderItem *>::iterator i;
|
||
i = childItems.end();
|
||
i--;
|
||
while (naturalSortLessThanCI(nameCurrent,nameLast) && i != childItems.begin())
|
||
{
|
||
i--;
|
||
nameLast = (*i)->data(1).toString();
|
||
}
|
||
if(!naturalSortLessThanCI(nameCurrent,nameLast)) //si se ha encontrado un elemento menor que current, se inserta justo despu<70>s
|
||
childItems.insert(++i,item);
|
||
else
|
||
childItems.insert(i,item);*/
|
||
}
|
||
}
|
||
|
||
void ReadingListItem::appendChild(ReadingListItem *item, int pos)
|
||
{
|
||
childItems.insert(pos, item);
|
||
}
|
||
|
||
void ReadingListItem::removeChild(ReadingListItem *item)
|
||
{
|
||
childItems.removeOne(item);
|
||
}
|
||
|
||
qulonglong ReadingListItem::getId() const
|
||
{
|
||
if (itemData.count() > Id)
|
||
return itemData.at(Id).toULongLong();
|
||
|
||
QLOG_WARN() << "Name for reading list item not available";
|
||
|
||
return 0;
|
||
}
|
||
|
||
QString ReadingListItem::name() const
|
||
{
|
||
if (itemData.count() > Name)
|
||
return itemData.at(Name).toString();
|
||
|
||
QLOG_WARN() << "Name for reading list item not available";
|
||
|
||
return "";
|
||
}
|
||
|
||
void ReadingListItem::setName(const QString &name)
|
||
{
|
||
if (itemData.count() > Name)
|
||
itemData[Name] = name;
|
||
}
|
||
|
||
int ReadingListItem::getOrdering() const
|
||
{
|
||
if (itemData.count() > Ordering)
|
||
return itemData[Ordering].toInt();
|
||
|
||
QLOG_WARN() << "Ordering for Item not available";
|
||
return 0;
|
||
}
|
||
|
||
void ReadingListItem::setOrdering(const int ordering)
|
||
{
|
||
if (itemData.count() > Ordering)
|
||
itemData[Ordering] = ordering;
|
||
}
|
||
|
||
QList<ReadingListItem *> ReadingListItem::children()
|
||
{
|
||
return childItems;
|
||
}
|
||
|
||
int ReadingListItem::row() const
|
||
{
|
||
if (parent)
|
||
return parent->childItems.indexOf(const_cast<ReadingListItem *>(this));
|
||
|
||
return 0;
|
||
}
|
||
|
||
ReadingListSeparatorItem::ReadingListSeparatorItem()
|
||
: ListItem(QList<QVariant>())
|
||
{
|
||
}
|
||
|
||
QIcon ReadingListSeparatorItem::getIcon() const
|
||
{
|
||
return QIcon();
|
||
}
|