Rivendellaudio/lib/rdlist_logs.cpp
Fred Gleason dc04bd0150 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>
2022-12-08 13:03:55 -05:00

143 lines
3.6 KiB
C++

// rdlist_logs.cpp
//
// Select a Rivendell Log
//
// (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
// 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 "rdapplication.h"
#include "rddb.h"
#include "rdescape_string.h"
#include "rdlist_logs.h"
RDListLogs::RDListLogs(QString *logname,RDLogFilter::FilterMode mode,
const QString &caption,QWidget *parent)
: RDDialog(parent)
{
list_logname=logname;
//
// Fix the Window Size
//
setMinimumSize(sizeHint());
setWindowTitle(caption+" - "+tr("Select Log"));
//
// Log Filter
//
list_filter_widget=new RDLogFilter(mode,this);
//
// Log List
//
list_log_view=new RDTableView(this);
list_log_model=new RDLogListModel(this);
list_log_model->setFont(defaultFont());
list_log_model->setPalette(palette());
list_log_view->setModel(list_log_model);
list_log_view->resizeColumnsToContents();
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()));
//
// OK Button
//
list_ok_button=new QPushButton(this);
list_ok_button->setFont(buttonFont());
list_ok_button->setText(tr("OK"));
connect(list_ok_button,SIGNAL(clicked()),this,SLOT(okButtonData()));
//
// Cancel Button
//
list_cancel_button=new QPushButton(this);
list_cancel_button->setFont(buttonFont());
list_cancel_button->setText(tr("Cancel"));
list_cancel_button->setDefault(true);
connect(list_cancel_button,SIGNAL(clicked()),this,SLOT(cancelButtonData()));
list_log_model->setFilterSql(list_filter_widget->whereSql(),
list_filter_widget->limitSql());
}
QSize RDListLogs::sizeHint() const
{
return QSize(600,400);
}
QSizePolicy RDListLogs::sizePolicy() const
{
return QSizePolicy(QSizePolicy::Fixed,QSizePolicy::Fixed);
}
void RDListLogs::closeEvent(QCloseEvent *e)
{
cancelButtonData();
}
void RDListLogs::doubleClickedData(const QModelIndex &index)
{
okButtonData();
}
void RDListLogs::modelResetData()
{
list_log_view->resizeColumnsToContents();
}
void RDListLogs::okButtonData()
{
if(list_log_view->selectionModel()->selectedRows().size()!=1) {
return;
}
*list_logname=list_log_model->logName(list_log_view->selectionModel()->selectedRows().at(0));
done(true);
}
void RDListLogs::cancelButtonData()
{
done(false);
}
void RDListLogs::resizeEvent(QResizeEvent *e)
{
list_filter_widget->
setGeometry(10,10,size().width()-10,
list_filter_widget->sizeHint().height());
list_log_view->
setGeometry(10,list_filter_widget->sizeHint().height(),
size().width()-20,
size().height()-list_filter_widget->sizeHint().height()-70);
list_ok_button->
setGeometry(size().width()-190,size().height()-60,80,50);
list_cancel_button->
setGeometry(size().width()-90,size().height()-60,80,50);
}