2022-08-04 Fred Gleason <fredg@paravelsystems.com>

* Added support for sorting the event list in rdcatch(1).

Signed-off-by: Fred Gleason <fredg@paravelsystems.com>
This commit is contained in:
Fred Gleason 2022-08-04 19:31:48 -04:00
parent e2f3ff23ce
commit 1f22430ed4
4 changed files with 73 additions and 6 deletions

View File

@ -23227,3 +23227,5 @@
* Added a 'Router' column to the event list in rdcatch(1). * Added a 'Router' column to the event list in rdcatch(1).
2022-08-04 Fred Gleason <fredg@paravelsystems.com> 2022-08-04 Fred Gleason <fredg@paravelsystems.com>
* Added the ability to filter rdcatch(1) events by switcher matrix. * Added the ability to filter rdcatch(1) events by switcher matrix.
2022-08-04 Fred Gleason <fredg@paravelsystems.com>
* Added support for sorting the event list in rdcatch(1).

View File

@ -379,6 +379,8 @@ MainWidget::MainWidget(RDConfig *c,QWidget *parent)
catch_recordings_model catch_recordings_model
,SLOT(notificationReceivedData(RDNotification *))); ,SLOT(notificationReceivedData(RDNotification *)));
catch_recordings_view->setModel(catch_recordings_model); catch_recordings_view->setModel(catch_recordings_model);
catch_recordings_view->setSortingEnabled(true);
catch_recordings_view->sortByColumn(2,Qt::AscendingOrder);
catch_recordings_view->resizeColumnsToContents(); catch_recordings_view->resizeColumnsToContents();
connect(catch_recordings_view,SIGNAL(doubleClicked(const QModelIndex &)), connect(catch_recordings_view,SIGNAL(doubleClicked(const QModelIndex &)),
this,SLOT(doubleClickedData(const QModelIndex &))); this,SLOT(doubleClickedData(const QModelIndex &)));

View File

@ -29,6 +29,11 @@
RecordListModel::RecordListModel(QObject *parent) RecordListModel::RecordListModel(QObject *parent)
: QAbstractTableModel(parent) : QAbstractTableModel(parent)
{ {
d_sort_column=0;
d_sort_order=Qt::AscendingOrder;
d_sort_clauses[Qt::AscendingOrder]="asc";
d_sort_clauses[Qt::DescendingOrder]="desc";
// //
// Column Attributes // Column Attributes
// //
@ -38,104 +43,138 @@ RecordListModel::RecordListModel(QObject *parent)
d_headers.push_back(tr("Description")); // 00 d_headers.push_back(tr("Description")); // 00
d_alignments.push_back(left); d_alignments.push_back(left);
d_order_columns.push_back("`RECORDINGS`.`DESCRIPTION`");
d_headers.push_back(tr("Location")); // 01 d_headers.push_back(tr("Location")); // 01
d_alignments.push_back(left); d_alignments.push_back(left);
d_order_columns.push_back("`RECORDINGS`.`STATION_NAME`");
d_headers.push_back(tr("Start")); // 02 d_headers.push_back(tr("Start")); // 02
d_alignments.push_back(left); d_alignments.push_back(left);
d_order_columns.push_back("`RECORDINGS`.`START_TIME`");
d_headers.push_back(tr("End")); // 03 d_headers.push_back(tr("End")); // 03
d_alignments.push_back(left); d_alignments.push_back(left);
d_order_columns.push_back("`RECORDINGS`.`END_TIME`");
d_headers.push_back(tr("Router")); // 04 d_headers.push_back(tr("Router")); // 04
d_alignments.push_back(left); d_alignments.push_back(left);
d_order_columns.push_back("`RECORDINGS`.`CHANNEL`");
d_headers.push_back(tr("Source")); // 05 d_headers.push_back(tr("Source")); // 05
d_alignments.push_back(left); d_alignments.push_back(left);
d_order_columns.push_back("`RECORDINGS`.`SWITCH_INPUT`");
d_headers.push_back(tr("Destination")); // 06 d_headers.push_back(tr("Destination")); // 06
d_alignments.push_back(left); d_alignments.push_back(left);
d_order_columns.push_back("`RECORDINGS`.`SWITCH_OUTPUT`");
d_headers.push_back(tr("Su")); // 07 d_headers.push_back(tr("Su")); // 07
d_alignments.push_back(left); d_alignments.push_back(left);
d_order_columns.push_back("`RECORDINGS`.`SUN`");
d_headers.push_back(tr("Mo")); // 08 d_headers.push_back(tr("Mo")); // 08
d_alignments.push_back(left); d_alignments.push_back(left);
d_order_columns.push_back("");
d_headers.push_back(tr("Tu")); // 09 d_headers.push_back(tr("Tu")); // 09
d_alignments.push_back(left); d_alignments.push_back(left);
d_order_columns.push_back("");
d_headers.push_back(tr("We")); // 10 d_headers.push_back(tr("We")); // 10
d_alignments.push_back(left); d_alignments.push_back(left);
d_order_columns.push_back("");
d_headers.push_back(tr("Th")); // 11 d_headers.push_back(tr("Th")); // 11
d_alignments.push_back(center); d_alignments.push_back(center);
d_order_columns.push_back("");
d_headers.push_back(tr("Fr")); // 12 d_headers.push_back(tr("Fr")); // 12
d_alignments.push_back(center); d_alignments.push_back(center);
d_order_columns.push_back("");
d_headers.push_back(tr("Sa")); // 13 d_headers.push_back(tr("Sa")); // 13
d_alignments.push_back(left); d_alignments.push_back(left);
d_order_columns.push_back("");
d_headers.push_back(tr("RSS Feed")); // 14 d_headers.push_back(tr("RSS Feed")); // 14
d_alignments.push_back(left); d_alignments.push_back(left);
d_order_columns.push_back("`FEEDS`.`KEY_NAME`");
d_headers.push_back(tr("Origin")); // 15 d_headers.push_back(tr("Origin")); // 15
d_alignments.push_back(left); d_alignments.push_back(left);
d_order_columns.push_back("`CUTS`.`ORIGIN_NAME`");
d_headers.push_back(tr("One Shot")); // 16 d_headers.push_back(tr("One Shot")); // 16
d_alignments.push_back(left); d_alignments.push_back(left);
d_order_columns.push_back("`RECORDINGS`.`ONE_SHOT`");
d_headers.push_back(tr("Trim Threshold")); // 17 d_headers.push_back(tr("Trim Threshold")); // 17
d_alignments.push_back(left); d_alignments.push_back(left);
d_order_columns.push_back("`RECORDINGS`.`TRIM_THRESHOLD`");
d_headers.push_back(tr("StartDate Offset")); // 18 d_headers.push_back(tr("StartDate Offset")); // 18
d_alignments.push_back(left); d_alignments.push_back(left);
d_order_columns.push_back("`RECORDINGS`.`STARTDATE_OFFSET`");
d_headers.push_back(tr("EndDate Offset")); // 19 d_headers.push_back(tr("EndDate Offset")); // 19
d_alignments.push_back(left); d_alignments.push_back(left);
d_order_columns.push_back("`RECORDINGS`.`ENDDATE_OFFSET`");
d_headers.push_back(tr("Format")); // 20 d_headers.push_back(tr("Format")); // 20
d_alignments.push_back(left); d_alignments.push_back(left);
d_order_columns.push_back("`RECORDINGS`.`FORMAT`");
d_headers.push_back(tr("Channels")); // 21 d_headers.push_back(tr("Channels")); // 21
d_alignments.push_back(left); d_alignments.push_back(left);
d_order_columns.push_back("`RECORDINGS`.`CHANNELS`");
d_headers.push_back(tr("Sample Rate")); // 22 d_headers.push_back(tr("Sample Rate")); // 22
d_alignments.push_back(left); d_alignments.push_back(left);
d_order_columns.push_back("`RECORDINGS`.`SAMPRATE`");
d_headers.push_back(tr("Bit Rate")); // 23 d_headers.push_back(tr("Bit Rate")); // 23
d_alignments.push_back(left); d_alignments.push_back(left);
d_order_columns.push_back("`RECORDINGS`.`BITRATE`");
d_headers.push_back(tr("Host")); // 24 d_headers.push_back(tr("Host")); // 24
d_alignments.push_back(left); d_alignments.push_back(left);
d_order_columns.push_back("");
d_headers.push_back(tr("Deck")); // 25 d_headers.push_back(tr("Deck")); // 25
d_alignments.push_back(left); d_alignments.push_back(left);
d_order_columns.push_back("");
d_headers.push_back(tr("Cut")); // 26 d_headers.push_back(tr("Cut")); // 26
d_alignments.push_back(left); d_alignments.push_back(left);
d_order_columns.push_back("");
d_headers.push_back(tr("Cart")); // 27 d_headers.push_back(tr("Cart")); // 27
d_alignments.push_back(left); d_alignments.push_back(left);
d_order_columns.push_back("");
d_headers.push_back(tr("ID")); // 28 d_headers.push_back(tr("ID")); // 28
d_alignments.push_back(left); d_alignments.push_back(left);
d_order_columns.push_back("`RECORDINGS`.`ID`");
d_headers.push_back(tr("Type")); // 29 d_headers.push_back(tr("Type")); // 29
d_alignments.push_back(left); d_alignments.push_back(left);
d_order_columns.push_back("`RECORDINGS`.`TYPE`");
d_headers.push_back(tr("Status")); // 30 d_headers.push_back(tr("Status")); // 30
d_alignments.push_back(left); d_alignments.push_back(left);
d_order_columns.push_back("");
d_headers.push_back(tr("Exit Code")); // 31 d_headers.push_back(tr("Exit Code")); // 31
d_alignments.push_back(left); d_alignments.push_back(left);
d_order_columns.push_back("`RECORDINGS`.`EXIT_CODE`");
d_headers.push_back(tr("State")); // 32 d_headers.push_back(tr("State")); // 32
d_alignments.push_back(left); d_alignments.push_back(left);
d_order_columns.push_back("");
updateModel(); setFilterSql("");
// updateModel();
} }
@ -227,6 +266,14 @@ QVariant RecordListModel::data(const QModelIndex &index,int role) const
} }
void RecordListModel::sort(int col,Qt::SortOrder order)
{
d_sort_column=col;
d_sort_order=order;
setFilterSql(d_filter_sql);
}
unsigned RecordListModel::recordId(const QModelIndex &row) const unsigned RecordListModel::recordId(const QModelIndex &row) const
{ {
return d_ids.at(row.row()); return d_ids.at(row.row());
@ -453,10 +500,18 @@ bool RecordListModel::refresh(unsigned id)
void RecordListModel::setFilterSql(const QString &sql) void RecordListModel::setFilterSql(const QString &sql)
{ {
if(sql!=d_filter_sql) { QString fsql=sql;
d_filter_sql=sql;
updateModel(); d_filter_sql=sql;
if((d_sort_column<0)||(d_order_columns.at(d_sort_column).isEmpty())) {
// Use "natural" sort order
fsql+=" order by `RECORDINGS`.`START_TIME` asc ";
} }
else {
fsql+=" order by "+d_order_columns.at(d_sort_column)+" "+
d_sort_clauses.value(d_sort_order);
}
updateModel(fsql);
} }
@ -492,7 +547,7 @@ void RecordListModel::notificationReceivedData(RDNotification *notify)
} }
void RecordListModel::updateModel() void RecordListModel::updateModel(const QString &filter_sql)
{ {
QList<QVariant> texts; QList<QVariant> texts;
QList<QVariant> icons; QList<QVariant> icons;
@ -518,9 +573,12 @@ void RecordListModel::updateModel()
// //
// Load Model Rows // Load Model Rows
// //
/*
sql=sqlFields()+ sql=sqlFields()+
d_filter_sql+ d_filter_sql+
"order by `RECORDINGS`.`START_TIME` "; "order by `RECORDINGS`.`START_TIME` ";
*/
sql=sqlFields()+filter_sql;
beginResetModel(); beginResetModel();
d_ids.clear(); d_ids.clear();
d_types.clear(); d_types.clear();

View File

@ -45,6 +45,7 @@ class RecordListModel : public QAbstractTableModel
QVariant headerData(int section,Qt::Orientation orient, QVariant headerData(int section,Qt::Orientation orient,
int role=Qt::DisplayRole) const; int role=Qt::DisplayRole) const;
QVariant data(const QModelIndex &index,int role=Qt::DisplayRole) const; QVariant data(const QModelIndex &index,int role=Qt::DisplayRole) const;
void sort(int col,Qt::SortOrder order=Qt::AscendingOrder);
unsigned recordId(const QModelIndex &row) const; unsigned recordId(const QModelIndex &row) const;
RDRecording::Type recordType(const QModelIndex &row) const; RDRecording::Type recordType(const QModelIndex &row) const;
RDRecording::ExitCode recordExitCode(const QModelIndex &row) const; RDRecording::ExitCode recordExitCode(const QModelIndex &row) const;
@ -72,7 +73,7 @@ class RecordListModel : public QAbstractTableModel
void notificationReceivedData(RDNotification *notify); void notificationReceivedData(RDNotification *notify);
protected: protected:
void updateModel(); void updateModel(const QString &filter_sql);
void updateRowLine(int line); void updateRowLine(int line);
void updateRow(int row,RDSqlQuery *q); void updateRow(int row,RDSqlQuery *q);
QString sqlFields() const; QString sqlFields() const;
@ -81,6 +82,10 @@ class RecordListModel : public QAbstractTableModel
QString GetSourceName(QString station,int matrix,int input); QString GetSourceName(QString station,int matrix,int input);
QString GetDestinationName(QString station,int matrix,int output); QString GetDestinationName(QString station,int matrix,int output);
void UpdateStatus(int line); void UpdateStatus(int line);
int d_sort_column;
Qt::SortOrder d_sort_order;
QMap<Qt::SortOrder,QString> d_sort_clauses;
QStringList d_order_columns;
QPalette d_palette; QPalette d_palette;
QFont d_font; QFont d_font;
QFont d_bold_font; QFont d_bold_font;