2025-06-18 Fred Gleason <fredg@paravelsystems.com>

* Refactored the 'Editing Event' dialog in rdlogmanager(1) to use
	'RDCartFilter' for filtering the library.
	* Modified 'RDCartFilter to apply a maximum limit of 100 matches
	for all searches.

Signed-off-by: Fred Gleason <fredg@paravelsystems.com>
This commit is contained in:
Fred Gleason
2025-06-18 11:24:47 -04:00
parent db12a00bde
commit 175b412317
5 changed files with 59 additions and 218 deletions

View File

@@ -24979,3 +24979,8 @@
* Added a 'RDTimeArray' class for optimization and debugging.
2025-05-14 Fred Gleason <fredg@paravelsystems.com>
* Added schema 376 support for '--orphaned-tables' in rddbmgr(8).
2025-06-18 Fred Gleason <fredg@paravelsystems.com>
* Refactored the 'Editing Event' dialog in rdlogmanager(1) to use
'RDCartFilter' for filtering the library.
* Modified 'RDCartFilter to apply a maximum limit of 100 matches
for all searches.

View File

@@ -2,7 +2,7 @@
//
// Filter widget for picking Rivendell carts.
//
// (C) Copyright 2021-2022 Fred Gleason <fredg@paravelsystems.com>
// (C) Copyright 2021-2025 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
@@ -158,36 +158,6 @@ RDCartFilter::RDCartFilter(bool show_drag_box,bool user_is_admin,
new QLabel(tr("Show Note Bubbles"),this);
d_shownotes_label->setFont(labelFont());
d_shownotes_label->setAlignment(Qt::AlignVCenter|Qt::AlignLeft);
//
// Show Matches Checkbox
//
d_showmatches_box=new QCheckBox(this);
d_showmatches_label=
new QLabel(tr("Show Only First ")+
QString::asprintf("%d",RD_LIMITED_CART_SEARCH_QUANTITY)+
tr(" Matches"),this);
d_showmatches_label->setFont(labelFont());
d_showmatches_label->setAlignment(Qt::AlignVCenter|Qt::AlignLeft);
connect(d_showmatches_box,SIGNAL(stateChanged(int)),
this,SLOT(searchLimitChangedData(int)));
//
// Load Data
//
switch(rda->libraryConf()->limitSearch()) {
case RDLibraryConf::LimitNo:
d_showmatches_box->setChecked(false);
break;
case RDLibraryConf::LimitYes:
d_showmatches_box->setChecked(true);
break;
case RDLibraryConf::LimitPrevious:
d_showmatches_box->setChecked(rda->libraryConf()->searchLimited());
break;
}
}
@@ -279,10 +249,7 @@ QString RDCartFilter::filterSql(const QStringList &and_fields) const
int RDCartFilter::cartLimit() const
{
if(d_showmatches_box->isChecked()) {
return RD_LIMITED_CART_SEARCH_QUANTITY;
}
return RD_MAX_CART_NUMBER+1; // Effectively "unlimited"
return RD_LIMITED_CART_SEARCH_QUANTITY;
}
@@ -358,13 +325,12 @@ void RDCartFilter::setShowTrackCarts(bool state)
bool RDCartFilter::limitSearch() const
{
return d_showmatches_box->isChecked();
return true;
}
void RDCartFilter::setLimitSearch(bool state)
{
d_showmatches_box->setChecked(state);
}
@@ -555,36 +521,53 @@ void RDCartFilter::searchLimitChangedData(int state)
void RDCartFilter::resizeEvent(QResizeEvent *e)
{
int w=e->size().width();
switch(rda->station()->filterMode()) {
case RDStation::FilterSynchronous:
d_filter_edit->setGeometry(70,10,e->size().width()-170,20);
d_filter_edit->setGeometry(70,10,w-170,20);
break;
case RDStation::FilterAsynchronous:
d_search_button->setGeometry(e->size().width()-180,10,80,50);
d_filter_edit->setGeometry(70,10,e->size().width()-260,20);
d_search_button->setGeometry(w-180,10,80,50);
d_filter_edit->setGeometry(70,10,w-260,20);
break;
}
d_clear_button->setGeometry(e->size().width()-90,10,80,50);
d_clear_button->setGeometry(w-90,10,80,50);
d_filter_label->setGeometry(10,10,55,20);
d_group_label->setGeometry(10,40,55,20);
d_group_box->setGeometry(70,38,140,24);
d_codes_label->setGeometry(215,40,115,20);
d_codes_box->setGeometry(335,38,120,24);
d_and_codes_label->setGeometry(455,40,labelFontMetrics()->width(d_and_codes_label->text()),20);
d_and_codes_box->setGeometry(d_and_codes_label->x()+d_and_codes_label->width(),38,120,24);
d_matches_label->setGeometry(660,40,100,20);
d_matches_edit->setGeometry(765,40,55,20);
d_showmatches_label->setGeometry(760,66,200,20);
d_showmatches_box->setGeometry(740,68,15,15);
d_allowdrag_label->setGeometry(580,66,130,20);
d_allowdrag_box->setGeometry(560,68,15,15);
d_showaudio_label->setGeometry(90,66,130,20);
d_showaudio_check->setGeometry(70,68,15,15);
d_showmacro_label->setGeometry(250,66,130,20);
d_showmacro_check->setGeometry(230,68,15,15);
d_shownotes_label->setGeometry(410,66,130,20);
d_shownotes_box->setGeometry(390,68,15,15);
d_and_codes_label->
setGeometry(455,40,labelFontMetrics()->width(d_and_codes_label->text()),20);
d_and_codes_box->
setGeometry(d_and_codes_label->x()+d_and_codes_label->width(),38,120,24);
int x_pos=70;
if(d_show_cart_type==RDCart::All) {
d_showaudio_check->setGeometry(x_pos,68,15,15);
d_showaudio_label->setGeometry(x_pos+20,66,130,20);
d_showmacro_check->setGeometry(x_pos+160,68,15,15);
d_showmacro_label->setGeometry(x_pos+180,66,130,20);
x_pos+=320;
}
d_shownotes_box->setGeometry(x_pos,68,15,15);
d_shownotes_label->setGeometry(x_pos+20,66,130,20);
x_pos+=160;
if(d_show_drag_box) {
d_allowdrag_box->setGeometry(x_pos,68,15,15);
d_allowdrag_label->setGeometry(x_pos+20,66,130,20);
x_pos+=160;
}
d_matches_label->setGeometry(w-165,66,100,20);
d_matches_edit->setGeometry(w-65,66,55,20);
}

View File

@@ -2,7 +2,7 @@
//
// Filter widget for picking Rivendell carts.
//
// (C) Copyright 2021 Fred Gleason <fredg@paravelsystems.com>
// (C) Copyright 2021-2025 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
@@ -103,10 +103,8 @@ class RDCartFilter : public RDWidget
QLabel *d_group_label;
QComboBox *d_codes_box;
QLabel *d_codes_label;
QComboBox *d_and_codes_box;
QLabel *d_and_codes_label;
QLineEdit *d_matches_edit;
QLabel *d_matches_label;
QPushButton *d_search_button;
@@ -119,15 +117,12 @@ class RDCartFilter : public RDWidget
QCheckBox *d_showmacro_check;
QLabel *d_shownotes_label;
QCheckBox *d_shownotes_box;
QLabel *d_showmatches_label;
QCheckBox *d_showmatches_box;
QLabel *d_showmacro_label;
RDCart::Type d_show_cart_type;
bool d_show_track_carts;
QString d_default_group;
bool d_user_is_admin;
QString d_service;
QString d_model_filter_sql;
int d_model_cart_limit;
};

View File

@@ -2,7 +2,7 @@
//
// Edit a Rivendell Log Event
//
// (C) Copyright 2002-2023 Fred Gleason <fredg@paravelsystems.com>
// (C) Copyright 2002-2025 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
@@ -54,62 +54,9 @@ EditEvent::EditEvent(QString eventname,bool new_event,QStringList *new_events,
// Library Section
// *******************************
//
// Text Filter
// Cart Filter
//
event_lib_filter_edit=new QLineEdit(this);
if(rda->station()->filterMode()==RDStation::FilterAsynchronous) {
connect(event_lib_filter_edit,SIGNAL(returnPressed()),
this,SLOT(searchData()));
}
connect(event_lib_filter_edit,SIGNAL(textChanged(const QString &)),
this,SLOT(filterChangedData(const QString &)));
event_lib_filter_label=new QLabel(tr("Filter:"),this);
event_lib_filter_label->setFont(labelFont());
event_lib_filter_label->setAlignment(Qt::AlignVCenter|Qt::AlignRight);
event_search_button=new QPushButton(tr("Search"),this);
event_search_button->setFont(subButtonFont());
event_search_button->setDisabled(true);
connect(event_search_button,SIGNAL(clicked()),this,SLOT(searchData()));
event_search_button->
setVisible(rda->station()->filterMode()==RDStation::FilterAsynchronous);
//
// Group Filter
//
event_group_box=new QComboBox(this);
event_group_model=new RDGroupListModel(true,false,false,this);
event_group_model->changeUser();
event_group_box->setModel(event_group_model);
connect(event_group_box,SIGNAL(activated(const QString &)),
this,SLOT(filterActivatedData(const QString &)));
event_group_label=new QLabel(tr("Group:"),this);
event_group_label->setFont(labelFont());
event_group_label->setAlignment(Qt::AlignVCenter|Qt::AlignRight);
//
// Type Filter
//
event_lib_type_group=new QButtonGroup(this);
connect(event_lib_type_group,SIGNAL(buttonClicked(int)),
this,SLOT(filterClickedData(int)));
event_lib_type_none_radio=new QRadioButton(this);
event_lib_type_group->addButton(event_lib_type_none_radio,0);
event_lib_type_none_label=new QLabel(tr("All"),this);
event_lib_type_none_label->setFont(labelFont());
event_lib_type_none_label->setAlignment(Qt::AlignVCenter|Qt::AlignLeft);
event_lib_type_none_radio->setChecked(true);
event_lib_type_audio_radio=new QRadioButton(this);
event_lib_type_group->addButton(event_lib_type_audio_radio,1);
event_lib_type_audio_label=new QLabel(tr("Audio Only"),this);
event_lib_type_audio_label->setFont(labelFont());
event_lib_type_audio_label->setAlignment(Qt::AlignVCenter|Qt::AlignLeft);
event_lib_type_macro_radio=new QRadioButton(this);
event_lib_type_group->addButton(event_lib_type_macro_radio,2);
event_lib_type_macro_label=new QLabel(tr("Macros Only"),this);
event_lib_type_macro_label->setFont(labelFont());
event_lib_type_macro_label->setAlignment(Qt::AlignVCenter|Qt::AlignLeft);
event_cart_filter=new RDCartFilter(false,false,this);
//
// Cart List
@@ -121,6 +68,11 @@ EditEvent::EditEvent(QString eventname,bool new_event,QStringList *new_events,
event_lib_model->setPalette(palette());
event_lib_view->setModel(event_lib_model);
event_lib_view->hideColumn(3);
event_cart_filter->setModel(event_lib_model);
connect(event_cart_filter,SIGNAL(filterChanged(const QString &,int)),
event_lib_model,SLOT(setFilterSql(const QString &,int)));
connect(rda->ripc(),SIGNAL(userChanged()),
event_cart_filter,SLOT(changeUser()));
connect(event_lib_view->selectionModel(),
SIGNAL(selectionChanged(const QItemSelection &,const QItemSelection &)),
this,
@@ -166,11 +118,6 @@ EditEvent::EditEvent(QString eventname,bool new_event,QStringList *new_events,
event_remarks_label->setFont(labelFont());
event_remarks_label->setAlignment(Qt::AlignVCenter|Qt::AlignLeft);
//
// Load Group List
//
RefreshLibrary();
//
// Properties Section
//
@@ -238,6 +185,7 @@ EditEvent::EditEvent(QString eventname,bool new_event,QStringList *new_events,
event_color_button->
setPalette(QPalette(event_color,palette().color(QPalette::Background)));
}
event_cart_filter->changeUser();
event_widget->load(event_event);
}
@@ -250,7 +198,7 @@ EditEvent::~EditEvent()
QSize EditEvent::sizeHint() const
{
return QSize(1300,800);
return QSize(1350,800);
}
@@ -260,46 +208,6 @@ QSizePolicy EditEvent::sizePolicy() const
}
void EditEvent::filterChangedData(const QString &str)
{
if(rda->station()->filterMode()==RDStation::FilterSynchronous) {
RefreshLibrary();
}
else {
event_search_button->setEnabled(true);
}
}
void EditEvent::filterActivatedData(const QString &str)
{
if(rda->station()->filterMode()==RDStation::FilterSynchronous) {
RefreshLibrary();
}
else {
event_search_button->setEnabled(true);
}
}
void EditEvent::filterClickedData(int id)
{
if(rda->station()->filterMode()==RDStation::FilterSynchronous) {
RefreshLibrary();
}
else {
event_search_button->setEnabled(true);
}
}
void EditEvent::searchData()
{
RefreshLibrary();
event_search_button->setDisabled(true);
}
void EditEvent::selectionChangedData(const QItemSelection &before,
const QItemSelection &after)
{
@@ -435,25 +343,8 @@ void EditEvent::resizeEvent(QResizeEvent *e)
int h=size().height();
int x_divide=w-event_widget->sizeHint().width();
if(rda->station()->filterMode()==RDStation::FilterAsynchronous) {
event_lib_filter_edit->setGeometry(55,2,x_divide-130,20);
}
else {
event_lib_filter_edit->setGeometry(55,2,x_divide-65,20);
}
event_lib_filter_label->setGeometry(5,2,45,20);
event_search_button->setGeometry(CENTER_LINE-70,2,60,20);
event_group_box->setGeometry(55,25,x_divide-65,20);
event_group_label->setGeometry(5,25,45,20);
event_lib_type_none_radio->setGeometry(55,55,15,15);
event_lib_type_none_label->setGeometry(75,55,30,15);
event_lib_type_audio_radio->setGeometry(125,55,15,15);
event_lib_type_audio_label->setGeometry(145,55,80,15);
event_lib_type_macro_radio->setGeometry(235,55,15,15);
event_lib_type_macro_label->setGeometry(255,55,80,15);
event_lib_view->setGeometry(10,80,x_divide-20,h/2);
event_cart_filter->setGeometry(0,0,x_divide,90);
event_lib_view->setGeometry(10,90,x_divide-20,h/2-10);
event_empty_cart->setGeometry(x_divide-230,h/2+100,32,32);
if(event_player!=NULL) {
event_player->playButton()->setGeometry(x_divide-180,h/2+90,80,50);
@@ -487,22 +378,6 @@ void EditEvent::paintEvent(QPaintEvent *e)
}
void EditEvent::RefreshLibrary()
{
QString sql=QString("where ")+
RDCartFilter::typeFilter(event_lib_type_group->button(0)->isChecked()||
event_lib_type_group->button(1)->isChecked(),
event_lib_type_group->button(0)->isChecked()||
event_lib_type_group->button(2)->isChecked(),
RDCart::All)+
RDCartFilter::phraseFilter(event_lib_filter_edit->text(),false)+
RDCartFilter::groupFilter(event_group_box->currentText(),
event_group_model->allGroupNames());
sql=sql.left(sql.length()-3);
event_lib_model->setFilterSql(sql,RD_MAX_CART_NUMBER+1);
}
void EditEvent::Save()
{
QString properties;

View File

@@ -2,7 +2,7 @@
//
// Edit a Rivendell Log Event
//
// (C) Copyright 2002-2023 Fred Gleason <fredg@paravelsystems.com>
// (C) Copyright 2002-2025 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
@@ -31,6 +31,7 @@
#include <QStringList>
#include <QTextEdit>
#include <rdcartfilter.h>
#include <rdcombobox.h>
#include <rddialog.h>
#include <rdemptycart.h>
@@ -60,10 +61,6 @@ class EditEvent : public RDDialog
QSizePolicy sizePolicy() const;
private slots:
void filterChangedData(const QString &str);
void filterActivatedData(const QString &str);
void filterClickedData(int id);
void searchData();
void selectionChangedData(const QItemSelection &before,
const QItemSelection &after);
void saveData();
@@ -79,26 +76,12 @@ class EditEvent : public RDDialog
void paintEvent(QPaintEvent *e);
private:
void RefreshLibrary();
void Save();
void CopyEventPerms(QString old_name,QString new_name);
void AbandonEvent(QString name);
QString event_name;
RDEvent *event_event;
QLabel *event_lib_filter_label;
QLineEdit *event_lib_filter_edit;
QButtonGroup *event_lib_type_group;
QLabel *event_lib_type_none_label;
QRadioButton *event_lib_type_none_radio;
QLabel *event_lib_type_audio_label;
QRadioButton *event_lib_type_audio_radio;
QLabel *event_lib_type_macro_label;
QRadioButton *event_lib_type_macro_radio;
QLabel *event_group_label;
QComboBox *event_group_box;
RDGroupListModel *event_group_model;
RDComboBox *event_sched_group_box;
QPushButton *event_search_button;
RDCartFilter *event_cart_filter;
LibraryTableView *event_lib_view;
RDLibraryModel *event_lib_model;
RDTransportButton *event_postimport_up_button;