2020-12-29 Fred Gleason <fredg@paravelsystems.com>

* Refactored the Full Log widget in rdairplay to use the model-based
	API.

Signed-off-by: Fred Gleason <fredg@paravelsystems.com>
This commit is contained in:
Fred Gleason
2020-12-29 12:47:31 -05:00
parent ca7ead3ea3
commit 1ce6d0ddc3
33 changed files with 984 additions and 1573 deletions

View File

@@ -34,62 +34,6 @@ RDLogModel::RDLogModel(const QString &logname,bool read_only,QObject *parent)
d_read_only=read_only;
MakeModel();
/*
d_fms=NULL;
d_bold_fms=NULL;
d_log_icons=new RDLogIcons();
d_start_time_style=RDLogModel::Scheduled;
d_max_id=0;
//
// Column Attributes
//
unsigned left=Qt::AlignLeft|Qt::AlignVCenter;
unsigned center=Qt::AlignCenter;
unsigned right=Qt::AlignRight|Qt::AlignVCenter;
d_headers.push_back(tr("Start Time"));
d_alignments.push_back(right);
d_headers.push_back(tr("Trans"));
d_alignments.push_back(center);
d_headers.push_back(tr("Cart"));
d_alignments.push_back(center);
d_headers.push_back(tr("Group"));
d_alignments.push_back(center);
d_headers.push_back(tr("Length"));
d_alignments.push_back(right);
d_headers.push_back(tr("Title"));
d_alignments.push_back(left);
d_headers.push_back(tr("Artist"));
d_alignments.push_back(left);
d_headers.push_back(tr("Client"));
d_alignments.push_back(left);
d_headers.push_back(tr("Agency"));
d_alignments.push_back(left);
d_headers.push_back(tr("Label"));
d_alignments.push_back(left);
d_headers.push_back(tr("Source"));
d_alignments.push_back(left);
d_headers.push_back(tr("Ext Data"));
d_alignments.push_back(left);
d_headers.push_back(tr("Line ID"));
d_alignments.push_back(right);
d_headers.push_back(tr("Count"));
d_alignments.push_back(right);
*/
}
@@ -129,6 +73,18 @@ void RDLogModel::setPalette(const QPalette &pal)
}
QFont RDLogModel::normalFont() const
{
return d_font;
}
QFont RDLogModel::boldFont() const
{
return d_bold_font;
}
void RDLogModel::setFont(const QFont &font)
{
d_font=font;
@@ -179,78 +135,19 @@ QVariant RDLogModel::data(const QModelIndex &index,int role) const
if((ll=logLine(row))!=NULL) {
switch((Qt::ItemDataRole)role) {
case Qt::DisplayRole:
switch(index.column()) {
case 0: // Start Time
return StartTimeString(row);
case 1: // Transition
return RDLogLine::transText(ll->transType());
case 2: // Cart Number
return ll->cartNumberText();
case 3: // Group
return ll->groupName();
case 4: // Length
return ll->forcedLengthText();
case 5: // Title
return ll->titleText();
case 6: // Artist
return ll->artist();
case 7: // Client
return ll->client();
case 8: // Agency
return ll->agency();
case 9: // Label
return ll->markerLabel();
case 10: // Source
return RDLogLine::sourceText(ll->source());
case 11: // Ext Data
return ll->extData();
case 12: // Line ID
return QString().sprintf("%d",ll->id());
case 13: // Count
return QString().sprintf("%d",row);
}
break;
return cellText(col,row,ll);
case Qt::DecorationRole:
if(col==0) {
return d_log_icons->typeIcon(ll->type(),ll->source());
}
break;
return cellIcon(col,row,ll);
case Qt::FontRole:
if(col==3) {
return d_bold_font;
}
return d_font;
return cellTextFont(col,row,ll);
case Qt::TextColorRole:
switch(col) {
case 0:
if(ll->timeType()==RDLogLine::Hard) {
return Qt::blue;
}
break;
case 3:
return ll->groupColor();
}
break;
return cellTextColor(col,row,ll);
case Qt::BackgroundRole:
return backgroundColor(row,ll);
return rowBackgroundColor(row,ll);
default:
break;
@@ -319,6 +216,8 @@ int RDLogModel::load(bool track_ptrs)
QString sql;
RDSqlQuery *q;
beginResetModel();
//
// Get the service name
//
@@ -336,10 +235,7 @@ int RDLogModel::load(bool track_ptrs)
LoadLines(d_log_name,0,track_ptrs);
if(lineCount()>0) {
beginInsertRows(QModelIndex(),0,lineCount()-1);
endInsertRows();
}
endResetModel();
return d_log_lines.size();
}
@@ -517,7 +413,7 @@ int RDLogModel::validate(QString *report,const QDate &date)
}
void RDLogModel::refresh(int line)
void RDLogModel::update(int line)
{
if(d_log_name.isEmpty()) {
return;
@@ -1606,7 +1502,140 @@ void RDLogModel::emitAllDataChanged()
}
QColor RDLogModel::backgroundColor(int line,RDLogLine *ll) const
QStringList RDLogModel::headerTexts() const
{
QStringList ret;
ret.push_back(tr("Start Time"));
ret.push_back(tr("Trans"));
ret.push_back(tr("Cart"));
ret.push_back(tr("Group"));
ret.push_back(tr("Length"));
ret.push_back(tr("Title"));
ret.push_back(tr("Artist"));
ret.push_back(tr("Client"));
ret.push_back(tr("Agency"));
ret.push_back(tr("Label"));
ret.push_back(tr("Source"));
ret.push_back(tr("Ext Data"));
ret.push_back(tr("Line ID"));
ret.push_back(tr("Count"));
return ret;
}
QList<int> RDLogModel::columnAlignments() const
{
QList<int> ret;
int left=Qt::AlignLeft|Qt::AlignVCenter;
int center=Qt::AlignCenter;
int right=Qt::AlignRight|Qt::AlignVCenter;
ret.push_back(right); // Start Time
ret.push_back(center); // Trans
ret.push_back(center); // Cart
ret.push_back(center); // Group
ret.push_back(right); // Length
ret.push_back(left); // Title
ret.push_back(left); // Artist
ret.push_back(left); // Client
ret.push_back(left); // Agency
ret.push_back(left); // Label
ret.push_back(left); // Source
ret.push_back(left); // Ext Data
ret.push_back(right); // Line ID
ret.push_back(right); // Count
return ret;
}
QPixmap RDLogModel::cellIcon(int col,int row,RDLogLine *ll) const
{
if(col==0) {
return d_log_icons->typeIcon(ll->type(),ll->source());
}
return QPixmap();
}
QString RDLogModel::cellText(int col,int line,RDLogLine *ll) const
{
switch(col) {
case 0: // Start Time
return StartTimeString(line);
case 1: // Transition
return RDLogLine::transText(ll->transType());
case 2: // Cart Number
return ll->cartNumberText();
case 3: // Group
return ll->groupName();
case 4: // Length
return ll->forcedLengthText();
case 5: // Title
return ll->titleText();
case 6: // Artist
return ll->artist();
case 7: // Client
return ll->client();
case 8: // Agency
return ll->agency();
case 9: // Label
return ll->markerLabel();
case 10: // Source
return RDLogLine::sourceText(ll->source());
case 11: // Ext Data
return ll->extData();
case 12: // Line ID
return QString().sprintf("%d",ll->id());
case 13: // Count
return QString().sprintf("%d",line);
}
return QString();
}
QFont RDLogModel::cellTextFont(int col,int line,RDLogLine *ll) const
{
if(col==3) {
return d_bold_font;
}
return d_font;
}
QColor RDLogModel::cellTextColor(int col,int line,RDLogLine *ll) const
{
switch(col) {
case 0:
if(ll->timeType()==RDLogLine::Hard) {
return Qt::blue;
}
break;
case 3:
return ll->groupColor();
}
return d_palette.color(QPalette::Foreground);
}
QColor RDLogModel::rowBackgroundColor(int line,RDLogLine *ll) const
{
return d_palette.color(QPalette::Base);
}
@@ -1620,52 +1649,16 @@ void RDLogModel::MakeModel()
d_start_time_style=RDLogModel::Scheduled;
d_max_id=0;
//
// Column Attributes
//
unsigned left=Qt::AlignLeft|Qt::AlignVCenter;
unsigned center=Qt::AlignCenter;
unsigned right=Qt::AlignRight|Qt::AlignVCenter;
QStringList headers=headerTexts();
QList<int> alignments=columnAlignments();
d_headers.push_back(tr("Start Time"));
d_alignments.push_back(right);
if(headers.size()!=alignments.size()) {
fprintf(stderr,"header/alignment size mismatch\n");
exit(1);
}
d_headers.push_back(tr("Trans"));
d_alignments.push_back(center);
d_headers.push_back(tr("Cart"));
d_alignments.push_back(center);
d_headers.push_back(tr("Group"));
d_alignments.push_back(center);
d_headers.push_back(tr("Length"));
d_alignments.push_back(right);
d_headers.push_back(tr("Title"));
d_alignments.push_back(left);
d_headers.push_back(tr("Artist"));
d_alignments.push_back(left);
d_headers.push_back(tr("Client"));
d_alignments.push_back(left);
d_headers.push_back(tr("Agency"));
d_alignments.push_back(left);
d_headers.push_back(tr("Label"));
d_alignments.push_back(left);
d_headers.push_back(tr("Source"));
d_alignments.push_back(left);
d_headers.push_back(tr("Ext Data"));
d_alignments.push_back(left);
d_headers.push_back(tr("Line ID"));
d_alignments.push_back(right);
d_headers.push_back(tr("Count"));
d_alignments.push_back(right);
for(int i=0;i<headers.size();i++) {
d_headers.push_back(headers.at(i));
d_alignments.push_back(alignments.at(i));
}
}