mirror of
https://github.com/ElvishArtisan/rivendell.git
synced 2025-04-07 01:13:50 +02:00
* Added 'RDListView::DateTimeSort' to the 'RDListView::SortType enumeration. * Fixed a bug in rdcastmanager(1) that caused incorrect ordering when sorting by the 'Start' and 'Expiration' columns in the 'Podcast Item List' dialog. Signed-off-by: Fred Gleason <fredg@paravelsystems.com>
287 lines
6.6 KiB
C++
287 lines
6.6 KiB
C++
// rdlistviewitem.cpp
|
|
//
|
|
// A color-selectable QListViewItem class for Rivendell
|
|
//
|
|
// (C) Copyright 2002-2020 Fred Gleason <fredg@paravelsystems.com>
|
|
//
|
|
// This program is free software; you can redistribute it and/or modify
|
|
// it under the terms of the GNU General Public License version 2 as
|
|
// published by the Free Software Foundation.
|
|
//
|
|
// This program is distributed in the hope that it will be useful,
|
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
// GNU General Public License for more details.
|
|
//
|
|
// You should have received a copy of the GNU General Public
|
|
// License along with this program; if not, write to the Free Software
|
|
// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
|
//
|
|
|
|
#include <qpainter.h>
|
|
#include <qstringlist.h>
|
|
|
|
#include <rdconf.h>
|
|
#include <rdlistviewitem.h>
|
|
|
|
RDListViewItem::RDListViewItem(Q3ListView *parent)
|
|
: Q3ListViewItem(parent)
|
|
{
|
|
item_line=-1;
|
|
item_id=-1;
|
|
list_parent=(RDListView *)parent;
|
|
item_background_color=
|
|
listView()->palette().color(QPalette::Active,QColorGroup::Base);
|
|
for(int i=0;i<parent->columns();i++) {
|
|
item_text_color.
|
|
push_back(parent->palette().color(QPalette::Active,QColorGroup::Text));
|
|
item_text_weight.push_back(parent->font().weight());
|
|
}
|
|
}
|
|
|
|
RDListViewItem::RDListViewItem(RDListViewItem *parent)
|
|
: Q3ListViewItem((Q3ListViewItem *)parent)
|
|
{
|
|
item_line=-1;
|
|
item_id=-1;
|
|
list_parent=(RDListView *)listView();
|
|
item_background_color=
|
|
list_parent->palette().color(QPalette::Active,QColorGroup::Base);
|
|
for(int i=0;i<list_parent->columns();i++) {
|
|
item_text_color.
|
|
push_back(list_parent->palette().color(QPalette::Active,QColorGroup::Text));
|
|
item_text_weight.push_back(list_parent->font().weight());
|
|
}
|
|
}
|
|
|
|
int RDListViewItem::line() const
|
|
{
|
|
return item_line;
|
|
}
|
|
|
|
|
|
void RDListViewItem::setLine(int line)
|
|
{
|
|
item_line=line;
|
|
}
|
|
|
|
|
|
int RDListViewItem::id() const
|
|
{
|
|
return item_id;
|
|
}
|
|
|
|
|
|
void RDListViewItem::setId(int id)
|
|
{
|
|
item_id=id;
|
|
}
|
|
|
|
|
|
QColor RDListViewItem::backgroundColor() const
|
|
{
|
|
return item_background_color;
|
|
}
|
|
|
|
|
|
void RDListViewItem::setBackgroundColor(QColor color)
|
|
{
|
|
item_background_color=color;
|
|
listView()->repaintItem(this);
|
|
}
|
|
|
|
|
|
void RDListViewItem::setTextColor(QColor color)
|
|
{
|
|
for(unsigned i=0;i<item_text_color.size();i++) {
|
|
item_text_color[i]=color;
|
|
}
|
|
listView()->repaintItem(this);
|
|
}
|
|
|
|
|
|
QColor RDListViewItem::textColor(int column) const
|
|
{
|
|
return item_text_color[column];
|
|
}
|
|
|
|
|
|
void RDListViewItem::setTextColor(int column,QColor color,int weight)
|
|
{
|
|
item_text_color[column]=color;
|
|
item_text_weight[column]=weight;
|
|
listView()->repaintItem(this);
|
|
}
|
|
|
|
|
|
void RDListViewItem::paintCell(QPainter *p,const QColorGroup &cg,int column,
|
|
int width,int align)
|
|
{
|
|
QColor text_color=item_text_color[column];
|
|
QColor back_color=item_background_color;
|
|
int x=0;
|
|
int y=0;
|
|
|
|
if(item_text_weight[column]!=p->font().weight()) {
|
|
int pt_size=0;
|
|
if((pt_size=p->font().pointSize())<0) {
|
|
pt_size=p->font().pixelSize();
|
|
}
|
|
QFont f(p->font().family(),pt_size,item_text_weight[column]);
|
|
f.setPixelSize(pt_size);
|
|
p->setFont(f);
|
|
}
|
|
if(isSelected()&&((column==0)||listView()->allColumnsShowFocus())) {
|
|
text_color=cg.highlightedText();
|
|
back_color=cg.highlight();
|
|
}
|
|
p->fillRect(0,0,width,height(),back_color);
|
|
if(pixmap(column)==NULL) {
|
|
for(int i=0;i<listView()->columns();i++) {
|
|
if(!text(i).isEmpty()) {
|
|
y=(height()+p->fontMetrics().boundingRect(text(i)).height())/2;
|
|
i=listView()->columns();
|
|
}
|
|
}
|
|
x=listView()->itemMargin();
|
|
if(((align&Qt::AlignHCenter)!=0)||((align&Qt::AlignCenter)!=0)) {
|
|
x=(width-p->fontMetrics().width(text(column)))/2;
|
|
}
|
|
if((align&Qt::AlignRight)!=0) {
|
|
x=width-p->fontMetrics().width(text(column))-listView()->itemMargin();
|
|
}
|
|
p->setPen(text_color);
|
|
p->drawText(x,y,text(column));
|
|
}
|
|
else {
|
|
x=listView()->itemMargin();
|
|
y=(height()-pixmap(column)->height())/2;
|
|
if((align&Qt::AlignRight)!=0) {
|
|
x=width-pixmap(column)->width()-listView()->itemMargin();
|
|
}
|
|
if(((align&Qt::AlignHCenter)!=0)||((align&Qt::AlignCenter)!=0)) {
|
|
x=(width-pixmap(column)->width())/2;
|
|
}
|
|
p->drawPixmap(x,y,*pixmap(column));
|
|
}
|
|
}
|
|
|
|
|
|
int RDListViewItem::compare(Q3ListViewItem *i,int col,bool ascending) const
|
|
{
|
|
int hard_column;
|
|
int prev_length;
|
|
int length;
|
|
QStringList fields;
|
|
QStringList prev_fields;
|
|
int this_num;
|
|
int that_num;
|
|
QDateTime this_dt;
|
|
QDateTime that_dt;
|
|
|
|
if((hard_column=list_parent->hardSortColumn())<0) {
|
|
switch(list_parent->columnSortType(col)) {
|
|
case RDListView::TimeSort:
|
|
prev_length=RDSetTimeLength(i->text(col));
|
|
length=RDSetTimeLength(text(col));
|
|
if(length<prev_length) {
|
|
return -1;
|
|
}
|
|
if(length>prev_length) {
|
|
return 1;
|
|
}
|
|
return 0;
|
|
|
|
case RDListView::LineSort:
|
|
if(line()<((RDListViewItem *)i)->line()) {
|
|
return -1;
|
|
}
|
|
if(line()>((RDListViewItem *)i)->line()) {
|
|
return 1;
|
|
}
|
|
return 0;
|
|
|
|
case RDListView::GpioSort:
|
|
fields=text(col).split("-");
|
|
prev_fields=i->text(col).split("-");
|
|
if(fields[0].toInt()>prev_fields[0].toInt()) {
|
|
return 1;
|
|
}
|
|
if(fields[0].toInt()<prev_fields[0].toInt()) {
|
|
return -1;
|
|
}
|
|
return 0;
|
|
|
|
case RDListView::NumericSort:
|
|
this_num=text(col).toInt();
|
|
that_num=i->text(col).toInt();
|
|
if(this_num>that_num) {
|
|
return 1;
|
|
}
|
|
if(this_num<that_num) {
|
|
return -1;
|
|
}
|
|
return 0;
|
|
|
|
case RDListView::DateTimeSort:
|
|
this_dt=QDateTime::fromString(text(col),"MM/dd/yyyy hh:mm:ss");
|
|
that_dt=QDateTime::fromString(i->text(col),"MM/dd/yyyy hh:mm:ss");
|
|
if(this_dt.isValid()) {
|
|
if(that_dt.isValid()) {
|
|
if(this_dt>that_dt) {
|
|
return 1;
|
|
}
|
|
if(this_dt<that_dt) {
|
|
return -1;
|
|
}
|
|
return 0;
|
|
}
|
|
else {
|
|
return 1;
|
|
}
|
|
}
|
|
else {
|
|
return -1;
|
|
}
|
|
return 0;
|
|
|
|
case RDListView::NormalSort:
|
|
return Q3ListViewItem::compare(i,col,ascending);
|
|
}
|
|
}
|
|
if(ascending) {
|
|
int this_count=text(hard_column).toInt();
|
|
if(this_count<0) {
|
|
return 1;
|
|
}
|
|
int that_count=i->text(hard_column).toInt();
|
|
if(that_count<0) {
|
|
return -1;
|
|
}
|
|
if(this_count>that_count) {
|
|
return 1;
|
|
}
|
|
if(this_count<that_count) {
|
|
return -1;
|
|
}
|
|
return 0;
|
|
}
|
|
else {
|
|
int this_count=text(hard_column).toInt();
|
|
if(this_count<0) {
|
|
return -1;
|
|
}
|
|
int that_count=i->text(hard_column).toInt();
|
|
if(that_count<0) {
|
|
return 1;
|
|
}
|
|
if(this_count>that_count) {
|
|
return -1;
|
|
}
|
|
if(this_count<that_count) {
|
|
return 1;
|
|
}
|
|
return 0;
|
|
}
|
|
}
|