mirror of
https://github.com/ElvishArtisan/rivendell.git
synced 2025-07-06 23:47:47 +02:00
2022-12-08 Fred Gleason <fredg@paravelsystems.com>
* Implemented column sorting for log lists in rdadmin(1),rdairplay(1), rdcastmanager(1) and rdlogedit(1). Signed-off-by: Fred Gleason <fredg@paravelsystems.com>
This commit is contained in:
parent
1bb35439fa
commit
dc04bd0150
@ -23775,3 +23775,6 @@
|
||||
section of rd.conf(5).
|
||||
2022-12-07 Fred Gleason <fredg@paravelsystems.com>
|
||||
* Incremented the package version to 4.0.0rc0int6.
|
||||
2022-12-08 Fred Gleason <fredg@paravelsystems.com>
|
||||
* Implemented column sorting for log lists in rdadmin(1),rdairplay(1),
|
||||
rdcastmanager(1) and rdlogedit(1).
|
||||
|
@ -2,7 +2,7 @@
|
||||
//
|
||||
// Select a Rivendell Log
|
||||
//
|
||||
// (C) Copyright 2002-2021 Fred Gleason <fredg@paravelsystems.com>
|
||||
// (C) Copyright 2002-2022 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
|
||||
@ -50,8 +50,9 @@ RDListLogs::RDListLogs(QString *logname,RDLogFilter::FilterMode mode,
|
||||
list_log_model->setPalette(palette());
|
||||
list_log_view->setModel(list_log_model);
|
||||
list_log_view->resizeColumnsToContents();
|
||||
connect(list_filter_widget,SIGNAL(filterChanged(const QString &)),
|
||||
list_log_model,SLOT(setFilterSql(const QString &)));
|
||||
connect(list_filter_widget,SIGNAL(filterChanged(const QString &,
|
||||
const QString &)),
|
||||
list_log_model,SLOT(setFilterSql(const QString &,const QString &)));
|
||||
connect(list_log_view,SIGNAL(doubleClicked(const QModelIndex &)),
|
||||
this,SLOT(doubleClickedData(const QModelIndex &)));
|
||||
connect(list_log_model,SIGNAL(modelReset()),this,SLOT(modelResetData()));
|
||||
@ -73,7 +74,8 @@ RDListLogs::RDListLogs(QString *logname,RDLogFilter::FilterMode mode,
|
||||
list_cancel_button->setDefault(true);
|
||||
connect(list_cancel_button,SIGNAL(clicked()),this,SLOT(cancelButtonData()));
|
||||
|
||||
list_log_model->setFilterSql(list_filter_widget->whereSql());
|
||||
list_log_model->setFilterSql(list_filter_widget->whereSql(),
|
||||
list_filter_widget->limitSql());
|
||||
}
|
||||
|
||||
|
||||
|
@ -163,9 +163,18 @@ QString RDLogFilter::whereSql() const
|
||||
sql+="(`LOGS`.`DESCRIPTION` like '%%"+RDEscapeString(filter)+"%%'))";
|
||||
}
|
||||
}
|
||||
|
||||
return sql;
|
||||
}
|
||||
|
||||
|
||||
QString RDLogFilter::limitSql() const
|
||||
{
|
||||
QString sql=" ";
|
||||
|
||||
if(filter_recent_check->isChecked()) {
|
||||
sql+=QString::asprintf("order by `LOGS`.`ORIGIN_DATETIME` desc limit %d",
|
||||
RD_LOGFILTER_LIMIT_QUAN);
|
||||
sql+=", `LOGS`.`ORIGIN_DATETIME` desc ";
|
||||
sql+=QString::asprintf("limit %d ",RD_LOGFILTER_LIMIT_QUAN);
|
||||
}
|
||||
|
||||
return sql;
|
||||
@ -194,14 +203,14 @@ void RDLogFilter::changeUser()
|
||||
void RDLogFilter::filterChangedData(const QString &str)
|
||||
{
|
||||
LogSearchString(filter_filter_edit->text());
|
||||
emit filterChanged(whereSql());
|
||||
emit filterChanged(whereSql(),limitSql());
|
||||
}
|
||||
|
||||
|
||||
void RDLogFilter::filterChangedData()
|
||||
{
|
||||
LogSearchString(filter_filter_edit->text());
|
||||
emit filterChanged(whereSql());
|
||||
emit filterChanged(whereSql(),limitSql());
|
||||
}
|
||||
|
||||
|
||||
@ -215,7 +224,7 @@ void RDLogFilter::filterClearedData()
|
||||
void RDLogFilter::serviceChangedData(int n)
|
||||
{
|
||||
LogSearchString(filter_filter_edit->text());
|
||||
emit filterChanged(whereSql());
|
||||
emit filterChanged(whereSql(),limitSql());
|
||||
}
|
||||
|
||||
|
||||
|
@ -42,12 +42,13 @@ class RDLogFilter : public QWidget
|
||||
QString filterServiceName() const;
|
||||
QString filterText() const;
|
||||
QString whereSql() const;
|
||||
QString limitSql() const;
|
||||
|
||||
public slots:
|
||||
void changeUser();
|
||||
|
||||
signals:
|
||||
void filterChanged(const QString &where_sql);
|
||||
void filterChanged(const QString &where_sql,const QString &limit_sql);
|
||||
|
||||
private slots:
|
||||
void filterChangedData(const QString &str);
|
||||
|
@ -2,7 +2,7 @@
|
||||
//
|
||||
// Data model for Rivendell log metadata
|
||||
//
|
||||
// (C) Copyright 2020-2021 Fred Gleason <fredg@paravelsystems.com>
|
||||
// (C) Copyright 2020-2022 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
|
||||
@ -25,6 +25,8 @@
|
||||
RDLogListModel::RDLogListModel(QObject *parent)
|
||||
: QAbstractTableModel(parent)
|
||||
{
|
||||
d_sort_column=0;
|
||||
d_sort_order=Qt::AscendingOrder;
|
||||
d_service_names.push_back(tr("ALL"));
|
||||
|
||||
//
|
||||
@ -36,39 +38,51 @@ RDLogListModel::RDLogListModel(QObject *parent)
|
||||
|
||||
d_headers.push_back(tr("Log Name"));
|
||||
d_alignments.push_back(left);
|
||||
d_column_fields.push_back("`NAME`");
|
||||
|
||||
d_headers.push_back(tr("Description"));
|
||||
d_alignments.push_back(left);
|
||||
d_column_fields.push_back("`DESCRIPTION`");
|
||||
|
||||
d_headers.push_back(tr("Service"));
|
||||
d_alignments.push_back(left);
|
||||
d_column_fields.push_back("`SERVICE`");
|
||||
|
||||
d_headers.push_back(tr("Music"));
|
||||
d_alignments.push_back(center);
|
||||
d_column_fields.push_back("`MUSIC_LINKED`");
|
||||
|
||||
d_headers.push_back(tr("Traffic"));
|
||||
d_alignments.push_back(center);
|
||||
d_column_fields.push_back("`TRAFFIC_LINKED`");
|
||||
|
||||
d_headers.push_back(tr("Tracks"));
|
||||
d_alignments.push_back(center);
|
||||
d_column_fields.push_back("`SCHEDULED_TRACKS`");
|
||||
|
||||
d_headers.push_back(tr("Valid From"));
|
||||
d_alignments.push_back(left);
|
||||
d_column_fields.push_back("`START_DATE`");
|
||||
|
||||
d_headers.push_back(tr("Valid To"));
|
||||
d_alignments.push_back(left);
|
||||
d_column_fields.push_back("`END_DATE`");
|
||||
|
||||
d_headers.push_back(tr("Auto Refresh"));
|
||||
d_alignments.push_back(center);
|
||||
d_column_fields.push_back("`AUTO_REFRESH`");
|
||||
|
||||
d_headers.push_back(tr("Origin"));
|
||||
d_alignments.push_back(left);
|
||||
d_column_fields.push_back("`ORIGIN_USER`");
|
||||
|
||||
d_headers.push_back(tr("Last Linked"));
|
||||
d_alignments.push_back(left);
|
||||
d_column_fields.push_back("`LINK_DATETIME`");
|
||||
|
||||
d_headers.push_back(tr("Last Modified"));
|
||||
d_alignments.push_back(left);
|
||||
d_column_fields.push_back("`MODIFIED_DATETIME`");
|
||||
|
||||
connect(rda->ripc(),SIGNAL(notificationReceived(RDNotification *)),
|
||||
this,SLOT(processNotification(RDNotification *)));
|
||||
@ -158,6 +172,16 @@ QVariant RDLogListModel::data(const QModelIndex &index,int role) const
|
||||
}
|
||||
|
||||
|
||||
void RDLogListModel::sort(int col,Qt::SortOrder order)
|
||||
{
|
||||
if((col!=d_sort_column)||(order!=d_sort_order)) {
|
||||
d_sort_column=col;
|
||||
d_sort_order=order;
|
||||
updateModel(d_filter_where_sql,d_filter_limit_sql);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
QString RDLogListModel::logName(const QModelIndex &row) const
|
||||
{
|
||||
return d_texts.at(row.row()).at(0).toString();
|
||||
@ -184,7 +208,7 @@ QModelIndex RDLogListModel::addLog(const QString &name)
|
||||
"`NAME` "+ // 00
|
||||
"from `LOGS` where "+
|
||||
"`NAME`='"+RDEscapeString(name)+"' "+
|
||||
d_filter_sql;
|
||||
d_filter_where_sql;
|
||||
RDSqlQuery *q=new RDSqlQuery(sql);
|
||||
if(q->first()) {
|
||||
QList<QVariant> list;
|
||||
@ -255,11 +279,13 @@ void RDLogListModel::refresh(const QString &logname)
|
||||
}
|
||||
|
||||
|
||||
void RDLogListModel::setFilterSql(const QString &sql)
|
||||
void RDLogListModel::setFilterSql(const QString &where_sql,
|
||||
const QString &limit_sql)
|
||||
{
|
||||
if(d_filter_sql!=sql) {
|
||||
updateModel(sql);
|
||||
d_filter_sql=sql;
|
||||
if((d_filter_where_sql!=where_sql)||(d_filter_limit_sql!=limit_sql)) {
|
||||
updateModel(where_sql,limit_sql);
|
||||
d_filter_where_sql=where_sql;
|
||||
d_filter_limit_sql=limit_sql;
|
||||
}
|
||||
}
|
||||
|
||||
@ -288,15 +314,21 @@ void RDLogListModel::processNotification(RDNotification *notify)
|
||||
}
|
||||
|
||||
|
||||
void RDLogListModel::updateModel(const QString &filter_sql)
|
||||
void RDLogListModel::updateModel(const QString &where_sql,
|
||||
const QString &limit_sql)
|
||||
{
|
||||
RDSqlQuery *q=NULL;
|
||||
QString sql=sqlFields()+
|
||||
" where "+
|
||||
"(`TYPE`=0)&&"+
|
||||
"(`LOG_EXISTS`='Y') "+
|
||||
filter_sql;
|
||||
// "order by `NAME` ";
|
||||
where_sql+" ";
|
||||
sql+="order by "+d_column_fields.at(d_sort_column)+" ";
|
||||
if(d_sort_order==Qt::DescendingOrder) {
|
||||
sql+="desc ";
|
||||
}
|
||||
sql+=limit_sql;
|
||||
|
||||
beginResetModel();
|
||||
d_texts.clear();
|
||||
d_icons.clear();
|
||||
|
@ -44,6 +44,7 @@ class RDLogListModel : public QAbstractTableModel
|
||||
QVariant headerData(int section,Qt::Orientation orient,
|
||||
int role=Qt::DisplayRole) const;
|
||||
QVariant data(const QModelIndex &index,int role=Qt::DisplayRole) const;
|
||||
void sort(int col,Qt::SortOrder order=Qt::AscendingOrder);
|
||||
QString logName(const QModelIndex &row) const;
|
||||
QModelIndex addLog(const QString &name);
|
||||
void removeLog(const QModelIndex &row);
|
||||
@ -52,13 +53,13 @@ class RDLogListModel : public QAbstractTableModel
|
||||
void refresh(const QString &logname);
|
||||
|
||||
public slots:
|
||||
void setFilterSql(const QString &sql);
|
||||
void setFilterSql(const QString &where_sql,const QString &limit_sql);
|
||||
|
||||
private slots:
|
||||
void processNotification(RDNotification *notify);
|
||||
|
||||
protected:
|
||||
void updateModel(const QString &filter_sql);
|
||||
void updateModel(const QString &where_sql,const QString &limit_sql);
|
||||
void updateRowLine(int line);
|
||||
void updateRow(int row,RDSqlQuery *q);
|
||||
QString sqlFields() const;
|
||||
@ -71,7 +72,11 @@ class RDLogListModel : public QAbstractTableModel
|
||||
QList<QList<QVariant> > d_texts;
|
||||
QList<QList<QVariant> > d_icons;
|
||||
QList<QVariant> d_alignments;
|
||||
QString d_filter_sql;
|
||||
QString d_filter_where_sql;
|
||||
QString d_filter_limit_sql;
|
||||
int d_sort_column;
|
||||
Qt::SortOrder d_sort_order;
|
||||
QStringList d_column_fields;
|
||||
};
|
||||
|
||||
|
||||
|
@ -52,8 +52,9 @@ ListLogs::ListLogs(RDLogPlay *log,QWidget *parent)
|
||||
list_log_model->setPalette(palette());
|
||||
list_log_view->setModel(list_log_model);
|
||||
list_log_view->resizeColumnsToContents();
|
||||
connect(list_filter_widget,SIGNAL(filterChanged(const QString &)),
|
||||
list_log_model,SLOT(setFilterSql(const QString &)));
|
||||
connect(list_filter_widget,
|
||||
SIGNAL(filterChanged(const QString &,const QString &)),
|
||||
list_log_model,SLOT(setFilterSql(const QString &,const QString &)));
|
||||
connect(list_log_view,SIGNAL(doubleClicked(const QModelIndex &)),
|
||||
this,SLOT(doubleClickedData(const QModelIndex &)));
|
||||
connect(list_log_model,SIGNAL(modelReset()),this,SLOT(modelResetData()));
|
||||
@ -123,7 +124,8 @@ int ListLogs::exec(QString *logname,QString *svcname,RDLogLock **log_lock)
|
||||
services_list.push_back(q->value(0).toString());
|
||||
}
|
||||
delete q;
|
||||
list_log_model->setFilterSql(list_filter_widget->whereSql());
|
||||
list_log_model->setFilterSql(list_filter_widget->whereSql(),
|
||||
list_filter_widget->limitSql());
|
||||
|
||||
return QDialog::exec();
|
||||
}
|
||||
|
@ -105,31 +105,30 @@ MainWidget::MainWidget(RDConfig *c,QWidget *parent)
|
||||
//
|
||||
// Log Filter
|
||||
//
|
||||
log_filter_widget=
|
||||
new RDLogFilter(RDLogFilter::UserFilter,this);
|
||||
connect(log_filter_widget,SIGNAL(filterChanged(const QString &)),
|
||||
this,SLOT(filterChangedData(const QString &)));
|
||||
log_filter_widget=new RDLogFilter(RDLogFilter::UserFilter,this);
|
||||
|
||||
//
|
||||
// Dialogs
|
||||
//
|
||||
log_edit_dialog=
|
||||
new EditLog(&log_filter,&log_group,&log_schedcode,&log_clipboard,this);
|
||||
|
||||
log_tracker_dialog=new VoiceTracker(&log_import_path,this);
|
||||
|
||||
//
|
||||
// Log List
|
||||
//
|
||||
log_log_view=new RDTableView(this);
|
||||
log_log_view->setSortingEnabled(true);
|
||||
log_log_view->sortByColumn(0,Qt::AscendingOrder);
|
||||
log_log_view->setSelectionMode(QAbstractItemView::ExtendedSelection);
|
||||
log_log_model=new RDLogListModel(this);
|
||||
log_log_model->setFont(defaultFont());
|
||||
log_log_model->setPalette(palette());
|
||||
log_log_view->setModel(log_log_model);
|
||||
log_log_view->resizeColumnsToContents();
|
||||
connect(log_filter_widget,SIGNAL(filterChanged(const QString &)),
|
||||
log_log_model,SLOT(setFilterSql(const QString &)));
|
||||
connect(log_filter_widget,
|
||||
SIGNAL(filterChanged(const QString &,const QString &)),
|
||||
log_log_model,SLOT(setFilterSql(const QString &,const QString &)));
|
||||
connect(log_log_view,SIGNAL(doubleClicked(const QModelIndex &)),
|
||||
this,SLOT(doubleClickedData(const QModelIndex &)));
|
||||
connect(log_log_view->selectionModel(),
|
||||
@ -240,9 +239,9 @@ void MainWidget::userData()
|
||||
rda->ripc()->user());
|
||||
|
||||
log_filter_widget->changeUser();
|
||||
log_log_model->setFilterSql(log_filter_widget->whereSql());
|
||||
log_log_model->setFilterSql(log_filter_widget->whereSql(),
|
||||
log_filter_widget->limitSql());
|
||||
log_log_view->resizeColumnsToContents();
|
||||
// RefreshList();
|
||||
|
||||
//
|
||||
// Set Control Perms
|
||||
@ -576,12 +575,6 @@ void MainWidget::reportData()
|
||||
}
|
||||
|
||||
|
||||
void MainWidget::filterChangedData(const QString &str)
|
||||
{
|
||||
// RefreshList();
|
||||
}
|
||||
|
||||
|
||||
void MainWidget::selectionChangedData(const QItemSelection &selected,
|
||||
const QItemSelection &deselected)
|
||||
{
|
||||
|
@ -60,7 +60,6 @@ class MainWidget : public RDMainWindow
|
||||
void deleteData();
|
||||
void trackData();
|
||||
void reportData();
|
||||
void filterChangedData(const QString &str);
|
||||
void selectionChangedData(const QItemSelection &selected,
|
||||
const QItemSelection &deselected);
|
||||
void doubleClickedData(const QModelIndex &index);
|
||||
|
Loading…
x
Reference in New Issue
Block a user