2021-02-09 Fred Gleason <fredg@paravelsystems.com>

* Refactored the 'Log Events' dialog in rdlogmanager(1) to use
	the model based API.

Signed-off-by: Fred Gleason <fredg@paravelsystems.com>
This commit is contained in:
Fred Gleason 2021-02-09 19:10:22 -05:00
parent 17ed26f066
commit 4b516d398c
16 changed files with 572 additions and 276 deletions

View File

@ -21077,3 +21077,6 @@
* Removed 'RD3CartDrag' dependency from rdlogedit(1).
* Removed 'RD3CartDrag' dependency from rdpanel(1).
* Removed 'RD3CartDrag'.
2021-02-09 Fred Gleason <fredg@paravelsystems.com>
* Refactored the 'Log Events' dialog in rdlogmanager(1) to use
the model based API.

View File

@ -53,6 +53,7 @@ dist_rdlogmanager_SOURCES = add_clock.cpp add_clock.h\
edit_schedrules.cpp edit_schedrules.h\
edit_schedcoderules.cpp edit_schedcoderules.h\
edit_track.cpp edit_track.h\
eventlistmodel.cpp eventlistmodel.h\
generate_log.cpp generate_log.h\
importcartsmodel.cpp importcartsmodel.h\
importcartsview.cpp importcartsview.h\
@ -81,6 +82,7 @@ nodist_rdlogmanager_SOURCES = moc_add_clock.cpp\
moc_edit_schedrules.cpp\
moc_edit_schedcoderules.cpp\
moc_edit_track.cpp\
moc_eventlistmodel.cpp\
moc_generate_log.cpp\
moc_importcartsmodel.cpp\
moc_importcartsview.cpp\

View File

@ -83,26 +83,30 @@ AddEvent::AddEvent(QString *logname,QWidget *parent)
event_name_label->setGeometry(10,11,130,19);
event_name_label->setFont(labelFont());
event_name_label->setAlignment(Qt::AlignRight|Qt::AlignVCenter|Qt::TextShowMnemonic);
connect(event_name_edit,SIGNAL(textChanged(const QString &)),
this,SLOT(nameChangedData(const QString &)));
//
// Ok Button
//
QPushButton *ok_button=new QPushButton(this);
ok_button->setGeometry(sizeHint().width()-180,sizeHint().height()-60,80,50);
ok_button->setDefault(true);
ok_button->setFont(buttonFont());
ok_button->setText(tr("&OK"));
connect(ok_button,SIGNAL(clicked()),this,SLOT(okData()));
event_ok_button=new QPushButton(this);
event_ok_button->
setGeometry(sizeHint().width()-180,sizeHint().height()-60,80,50);
event_ok_button->setDefault(true);
event_ok_button->setFont(buttonFont());
event_ok_button->setText(tr("&OK"));
connect(event_ok_button,SIGNAL(clicked()),this,SLOT(okData()));
event_ok_button->setDisabled(true);
//
// Cancel Button
//
QPushButton *cancel_button=new QPushButton(this);
cancel_button->setGeometry(sizeHint().width()-90,sizeHint().height()-60,
80,50);
cancel_button->setFont(buttonFont());
cancel_button->setText(tr("&Cancel"));
connect(cancel_button,SIGNAL(clicked()),this,SLOT(cancelData()));
event_cancel_button=new QPushButton(this);
event_cancel_button->
setGeometry(sizeHint().width()-90,sizeHint().height()-60,80,50);
event_cancel_button->setFont(buttonFont());
event_cancel_button->setText(tr("&Cancel"));
connect(event_cancel_button,SIGNAL(clicked()),this,SLOT(cancelData()));
//
// Populate Data
@ -130,6 +134,12 @@ QSizePolicy AddEvent::sizePolicy() const
}
void AddEvent::nameChangedData(const QString &str)
{
event_ok_button->setDisabled(str.isEmpty());
}
void AddEvent::okData()
{
*event_name=event_name_edit->text();

View File

@ -21,7 +21,8 @@
#ifndef ADD_EVENT_H
#define ADD_EVENT_H
#include <qlineedit.h>
#include <QLineEdit>
#include <QPushButton>
#include <rddialog.h>
@ -36,6 +37,7 @@ class AddEvent : public RDDialog
QSizePolicy sizePolicy() const;
private slots:
void nameChangedData(const QString &str);
void okData();
void cancelData();
@ -45,8 +47,9 @@ class AddEvent : public RDDialog
private:
QLineEdit *event_name_edit;
QString *event_name;
QPushButton *event_ok_button;
QPushButton *event_cancel_button;
};
#endif
#endif // ADD_EVENT_H

View File

@ -695,6 +695,7 @@ EditEvent::EditEvent(QString eventname,bool new_event,
button->setFont(buttonFont());
button->setText(tr("Save &As"));
connect(button,SIGNAL(clicked()),this,SLOT(saveAsData()));
button->setDisabled(new_event);
//
// Service Association Button

View File

@ -0,0 +1,325 @@
// eventlistmodel.cpp
//
// Data model for Rivendell rdlogmanager(1) events
//
// (C) Copyright 2021 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 <QPainter>
#include "rdapplication.h"
#include "rdconf.h"
#include "rdescape_string.h"
#include "rdevent_line.h"
#include "eventlistmodel.h"
EventListModel::EventListModel(QObject *parent)
: QAbstractTableModel(parent)
{
//
// Column Attributes
//
unsigned left=Qt::AlignLeft|Qt::AlignVCenter;
unsigned center=Qt::AlignCenter;
//unsigned right=Qt::AlignRight|Qt::AlignVCenter;
d_headers.push_back(tr("Name"));
d_alignments.push_back(left);
d_headers.push_back(tr("Trans"));
d_alignments.push_back(center);
d_headers.push_back(tr("Properties"));
d_alignments.push_back(left);
updateModel();
}
EventListModel::~EventListModel()
{
}
QPalette EventListModel::palette()
{
return d_palette;
}
void EventListModel::setPalette(const QPalette &pal)
{
d_palette=pal;
}
void EventListModel::setFont(const QFont &font)
{
d_font=font;
d_bold_font=font;
d_bold_font.setWeight(QFont::Bold);
}
int EventListModel::columnCount(const QModelIndex &parent) const
{
return d_headers.size();
}
int EventListModel::rowCount(const QModelIndex &parent) const
{
return d_texts.size();
}
QVariant EventListModel::headerData(int section,Qt::Orientation orient,
int role) const
{
if((orient==Qt::Horizontal)&&(role==Qt::DisplayRole)) {
return d_headers.at(section);
}
return QVariant();
}
QVariant EventListModel::data(const QModelIndex &index,int role) const
{
QString str;
int col=index.column();
int row=index.row();
if(row<d_texts.size()) {
switch((Qt::ItemDataRole)role) {
case Qt::DisplayRole:
return d_texts.at(row).at(col);
case Qt::DecorationRole:
if(col==0) {
return d_icons.at(row);
}
break;
case Qt::TextAlignmentRole:
return d_alignments.at(col);
case Qt::FontRole:
if(col==0) {
return d_bold_font;
}
return d_font;
case Qt::TextColorRole:
// Nothing to do!
break;
case Qt::BackgroundRole:
// Nothing to do!
break;
default:
break;
}
}
return QVariant();
}
QString EventListModel::eventName(const QModelIndex &row) const
{
return d_texts.at(row.row()).at(0).toString();
}
QModelIndex EventListModel::addEvent(const QString &name)
{
//
// Find the insertion offset
//
int offset=d_texts.size();
for(int i=0;i<d_texts.size();i++) {
if(name.toLower()<d_texts.at(i).at(0).toString().toLower()) {
offset=i;
break;
}
}
beginInsertRows(QModelIndex(),offset,offset);
QList<QVariant> list;
for(int i=0;i<columnCount();i++) {
list.push_back(QVariant());
}
list[0]=name;
d_texts.insert(offset,list);
d_icons.insert(offset,QVariant());
updateRowLine(offset);
endInsertRows();
return createIndex(offset,0);
}
void EventListModel::removeEvent(const QModelIndex &row)
{
beginRemoveRows(QModelIndex(),row.row(),row.row());
d_texts.removeAt(row.row());
d_icons.removeAt(row.row());
endRemoveRows();
}
void EventListModel::removeEvent(const QString &name)
{
for(int i=0;i<d_texts.size();i++) {
if(d_texts.at(i).at(0).toString()==name) {
removeEvent(createIndex(i,0));
return;
}
}
}
void EventListModel::refresh(const QModelIndex &row)
{
if(row.row()<d_texts.size()) {
QString sql=sqlFields()+
"where "+
"EVENTS.NAME=\""+RDEscapeString(d_texts.at(row.row()).at(0).toString())+
"\"";
RDSqlQuery *q=new RDSqlQuery(sql);
if(q->first()) {
updateRow(row.row(),q);
emit dataChanged(createIndex(row.row(),0),
createIndex(row.row(),columnCount()));
}
delete q;
}
}
void EventListModel::refresh(const QString &name)
{
for(int i=0;i<d_texts.size();i++) {
if(d_texts.at(i).at(0).toString()==name) {
updateRowLine(i);
return;
}
}
}
void EventListModel::setFilterSql(const QString &sql)
{
if(sql!=d_filter_sql) {
d_filter_sql=sql;
updateModel();
}
}
void EventListModel::updateModel()
{
QList<QVariant> texts;
RDSqlQuery *q=NULL;
QString sql=sqlFields()+
d_filter_sql+
"order by EVENTS.NAME ";
beginResetModel();
d_texts.clear();
d_icons.clear();
q=new RDSqlQuery(sql);
while(q->next()) {
d_texts.push_back(texts);
d_icons.push_back(QVariant());
updateRow(d_texts.size()-1,q);
}
delete q;
endResetModel();
}
void EventListModel::updateRowLine(int line)
{
if(line<d_texts.size()) {
QString sql=sqlFields()+
"where "+
"EVENTS.NAME=\""+RDEscapeString(d_texts.at(line).at(0).toString())+"\"";
RDSqlQuery *q=new RDSqlQuery(sql);
if(q->first()) {
updateRow(line,q);
}
delete q;
}
}
void EventListModel::updateRow(int row,RDSqlQuery *q)
{
QList<QVariant> texts;
// Name
texts.push_back(q->value(0));
// Trans
texts.
push_back(RDLogLine::transText((RDLogLine::TransType)q->value(3).toUInt()));
// Properties
texts.push_back(RDEventLine::propertiesText(q->value(2).toInt(),
(RDLogLine::TransType)q->value(3).toUInt(),
(RDLogLine::TimeType)q->value(4).toUInt(),
q->value(5).toInt(),
RDBool(q->value(6).toString()),
(RDEventLine::ImportSource)q->value(7).toUInt(),
!q->value(8).toString().isEmpty()));
d_texts[row]=texts;
d_icons[row]=MakeIcon(q->value(1).toString());
}
QString EventListModel::sqlFields() const
{
QString sql=QString("select ")+
"NAME,"+ // 00
"COLOR,"+ // 01
"PREPOSITION,"+ // 02
"FIRST_TRANS_TYPE,"+ // 03
"TIME_TYPE,"+ // 04
"GRACE_TIME,"+ // 05
"USE_AUTOFILL,"+ // 06
"IMPORT_SOURCE,"+ // 07
"NESTED_EVENT "+ // 08
"from EVENTS ";
return sql;
}
QPixmap EventListModel::MakeIcon(const QString &color) const
{
QPixmap pix(QSize(15,15));
QPainter *p=new QPainter();
p->begin(&pix);
p->fillRect(0,0,15,15,QColor(color));
p->end();
delete p;
return pix;
}

View File

@ -0,0 +1,75 @@
// eventlistmodel.h
//
// Data model for Rivendell rdlogmanager(1) events
//
// (C) Copyright 2021 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.
//
#ifndef EVENTLISTMODEL_H
#define EVENTLISTMODEL_H
#include <QAbstractTableModel>
#include <QFont>
#include <QList>
#include <QPalette>
#include <QTimer>
#include <rddb.h>
#include <rdnotification.h>
#include <rduser.h>
class EventListModel : public QAbstractTableModel
{
Q_OBJECT
public:
EventListModel(QObject *parent=0);
~EventListModel();
QPalette palette();
void setPalette(const QPalette &pal);
void setFont(const QFont &font);
int columnCount(const QModelIndex &parent=QModelIndex()) const;
int rowCount(const QModelIndex &parent=QModelIndex()) const;
QVariant headerData(int section,Qt::Orientation orient,
int role=Qt::DisplayRole) const;
QVariant data(const QModelIndex &index,int role=Qt::DisplayRole) const;
QString eventName(const QModelIndex &row) const;
QModelIndex addEvent(const QString &name);
void removeEvent(const QModelIndex &row);
void removeEvent(const QString &name);
void refresh(const QModelIndex &row);
void refresh(const QString &name);
void setFilterSql(const QString &sql);
protected:
void updateModel();
void updateRowLine(int line);
void updateRow(int row,RDSqlQuery *q);
QString sqlFields() const;
private:
QPixmap MakeIcon(const QString &color) const;
QPalette d_palette;
QFont d_font;
QFont d_bold_font;
QList<QVariant> d_headers;
QList<QVariant> d_alignments;
QList<QList<QVariant> > d_texts;
QList<QVariant> d_icons;
QString d_filter_sql;
};
#endif // EVENTLISTMODEL_H

View File

@ -2,7 +2,7 @@
//
// List a Rivendell Log Event
//
// (C) Copyright 2002-2020 Fred Gleason <fredg@paravelsystems.com>
// (C) Copyright 2002-2021 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
@ -18,8 +18,7 @@
// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
//
#include <qmessagebox.h>
#include <qpainter.h>
#include <QMessageBox>
#include <rdconf.h>
#include <rdescape_string.h>
@ -57,16 +56,16 @@ ListEvents::ListEvents(QString *eventname,QWidget *parent)
//
// Events List
//
edit_events_list=new Q3ListView(this);
edit_events_list->setAllColumnsShowFocus(true);
edit_events_list->setItemMargin(5);
edit_events_list->addColumn(tr("Name"));
edit_events_list->addColumn(tr("Trans"));
edit_events_list->setColumnAlignment(1,Qt::AlignCenter);
edit_events_list->addColumn(tr("Properties"));
connect(edit_events_list,
SIGNAL(doubleClicked(Q3ListViewItem *,const QPoint &,int)),
this,SLOT(doubleClickedData(Q3ListViewItem *,const QPoint &,int)));
edit_events_view=new RDTableView(this);
edit_events_model=new EventListModel(this);
edit_events_model->setFont(font());
edit_events_model->setPalette(palette());
edit_events_view->setModel(edit_events_model);
connect(edit_events_view,SIGNAL(doubleClicked(const QModelIndex &)),
this,SLOT(doubleClickedData(const QModelIndex &)));
connect(edit_events_model,SIGNAL(modelReset()),
edit_events_view,SLOT(resizeColumnsToContents()));
edit_events_view->resizeColumnsToContents();
//
// Add Button
@ -159,8 +158,6 @@ ListEvents::ListEvents(QString *eventname,QWidget *parent)
edit_filter_box->setCurrentItem(edit_filter_box->count()-1);
}
}
RefreshList();
}
@ -237,31 +234,39 @@ void ListEvents::addData()
"SERVICE_NAME=\""+RDEscapeString(edit_filter_box->currentText())+"\"";
RDSqlQuery::apply(sql);
}
QModelIndex row=edit_events_model->addEvent(logname);
if(row.isValid()) {
edit_events_view->selectRow(row.row());
}
}
delete event_dialog;
Q3ListViewItem *item=new Q3ListViewItem(edit_events_list);
item->setText(0,logname);
RefreshItem(item,&new_events);
edit_events_list->setSelected(item,true);
edit_events_list->ensureItemVisible(item);
for(unsigned i=0;i<new_events.size();i++) {
QModelIndex row=edit_events_model->addEvent(new_events.at(i));
if(row.isValid()) {
edit_events_view->selectRow(row.row());
}
}
}
void ListEvents::editData()
{
std::vector<QString> new_events;
QModelIndexList rows=edit_events_view->selectionModel()->selectedRows();
Q3ListViewItem *item=edit_events_list->selectedItem();
if(item==NULL) {
if(rows.size()!=1) {
return;
}
EditEvent *event_dialog=new EditEvent(item->text(0),false,&new_events,this);
if(event_dialog->exec()<-1) {
delete event_dialog;
return;
EditEvent *event_dialog=
new EditEvent(edit_events_model->eventName(rows.first()),false,&new_events,
this);
if(event_dialog->exec()>=-1) {
edit_events_model->refresh(rows.first());
}
for(unsigned i=0;i<new_events.size();i++) {
edit_events_model->addEvent(new_events.at(i));
}
delete event_dialog;
RefreshItem(item,&new_events);
}
@ -269,21 +274,21 @@ void ListEvents::deleteData()
{
int n;
QString clock_list;
QModelIndexList rows=edit_events_view->selectionModel()->selectedRows();
Q3ListViewItem *item=edit_events_list->selectedItem();
if(item==NULL) {
if(rows.size()!=1) {
return;
}
if(QMessageBox::question(this,"RDLogManager - "+tr("Delete Event"),
tr("Are you sure you want to delete")+" \""+
item->text(0)+"\"?",
edit_events_model->eventName(rows.first())+"\"?",
QMessageBox::Yes,QMessageBox::No)
!=QMessageBox::Yes) {
return;
}
if((n=ActiveEvents(item->text(0),&clock_list))>0) {
if((n=ActiveEvents(edit_events_model->eventName(rows.first()),&clock_list))>0) {
if(QMessageBox::warning(this,"RDLogManager - "+tr("Event In Use"),
"\""+item->text(0)+"\" "+
"\""+edit_events_model->eventName(rows.first())+"\" "+
tr("is in use in the following clocks")+":\n\n"+
clock_list+"\n"+
tr("Do you still want to delete it?"),
@ -292,77 +297,88 @@ void ListEvents::deleteData()
return;
}
}
DeleteEvent(item->text(0));
delete item;
RefreshList();
DeleteEvent(edit_events_model->eventName(rows.first()));
edit_events_model->removeEvent(rows.first());
}
void ListEvents::renameData()
{
QString sql;
RDSqlQuery *q;
Q3ListViewItem *item=edit_events_list->selectedItem();
if(item==NULL) {
QModelIndexList rows=edit_events_view->selectionModel()->selectedRows();
if(rows.size()!=1) {
return;
}
QString new_name=item->text(0);
QString old_name=edit_events_model->eventName(rows.first());
QString new_name=old_name;
RenameItem *rename_dialog=new RenameItem(&new_name,"EVENTS",this);
if(rename_dialog->exec()<-1) {
delete rename_dialog;
return;
}
delete rename_dialog;
if(old_name==new_name) {
return;
}
//
// Rename Clock References
//
sql=QString("update CLOCK_LINES set ")+
"EVENT_NAME=\""+RDEscapeString(new_name)+"\" where "+
"EVENT_NAME=\""+RDEscapeString(item->text(0))+"\"";
q=new RDSqlQuery(sql);
delete q;
"EVENT_NAME=\""+RDEscapeString(old_name)+"\"";
RDSqlQuery::apply(sql);
//
// Rename Event Line References
//
sql=QString("update EVENT_LINES set ")+
"EVENT_NAME=\""+RDEscapeString(new_name)+"\" where "+
"EVENT_NAME=\""+RDEscapeString(item->text(0))+"\"";
q=new RDSqlQuery(sql);
delete q;
"EVENT_NAME=\""+RDEscapeString(old_name)+"\"";
RDSqlQuery::apply(sql);
//
// Rename Service Permissions
//
sql=QString().sprintf("update EVENT_PERMS set EVENT_NAME=\"%s\"\
where EVENT_NAME=\"%s\"",
(const char *)new_name,
(const char *)item->text(0));
q=new RDSqlQuery(sql);
delete q;
sql=QString("update EVENT_PERMS set ")+
"EVENT_NAME=\""+RDEscapeString(new_name)+"\" "+
"where EVENT_NAME=\""+RDEscapeString(old_name)+"\"";
RDSqlQuery::apply(sql);
//
// Rename Primary Key
//
sql=QString().sprintf("update EVENTS set NAME=\"%s\" where NAME=\"%s\"",
(const char *)new_name,
(const char *)item->text(0));
q=new RDSqlQuery(sql);
delete q;
sql=QString("update EVENTS set ")+
"NAME=\""+RDEscapeString(new_name)+"\" where "+
"NAME=\""+RDEscapeString(old_name)+"\"";
RDSqlQuery::apply(sql);
item->setText(0,new_name);
RefreshItem(item);
edit_events_model->removeEvent(old_name);
QModelIndex row=edit_events_model->addEvent(new_name);
if(row.isValid()) {
edit_events_view->selectRow(row.row());
}
}
void ListEvents::filterActivatedData(int id)
{
RefreshList();
QString filter;
if(id==1) { // NONE Filter
filter=GetNoneFilter();
}
else {
if(id>1) {
filter=GetEventFilter(edit_filter_box->currentText());
}
}
edit_events_model->setFilterSql(filter);
}
void ListEvents::doubleClickedData(Q3ListViewItem *item,const QPoint &,int)
void ListEvents::doubleClickedData(const QModelIndex &index)
{
if(edit_eventname==NULL) {
editData();
@ -381,13 +397,13 @@ void ListEvents::closeData()
void ListEvents::okData()
{
Q3ListViewItem *item=edit_events_list->selectedItem();
*event_filter=edit_filter_box->currentText();
if(item==NULL) {
QModelIndexList rows=edit_events_view->selectionModel()->selectedRows();
if(rows.size()!=1) {
done(-1);
return;
}
*edit_eventname=item->text(0);
*edit_eventname=edit_events_model->eventName(rows.first());
done(0);
}
@ -401,7 +417,7 @@ void ListEvents::cancelData()
void ListEvents::resizeEvent(QResizeEvent *e)
{
edit_filter_box->setGeometry(65,10,size().width()-75,20);
edit_events_list->setGeometry(10,45,size().width()-20,size().height()-125);
edit_events_view->setGeometry(10,45,size().width()-20,size().height()-125);
edit_add_button->setGeometry(10,size().height()-60,80,50);
edit_edit_button->setGeometry(100,size().height()-60,80,50);
edit_delete_button->setGeometry(190,size().height()-60,80,50);
@ -418,104 +434,6 @@ void ListEvents::closeEvent(QCloseEvent *e)
}
void ListEvents::RefreshList()
{
QString filter;
if(edit_filter_box->currentItem()==1) { // NONE Filter
filter=GetNoneFilter();
}
else {
if(edit_filter_box->currentItem()>1) {
filter=GetEventFilter(edit_filter_box->currentText());
}
}
edit_events_list->clear();
QString sql=WriteItemSql()+" "+filter;
RDSqlQuery *q=new RDSqlQuery(sql);
Q3ListViewItem *item=NULL;
while(q->next()) {
item=new Q3ListViewItem(edit_events_list);
WriteItem(item,q);
}
delete q;
}
void ListEvents::RefreshItem(Q3ListViewItem *item,
std::vector<QString> *new_events)
{
Q3ListViewItem *new_item;
UpdateItem(item,item->text(0));
if(new_events!=NULL) {
for(unsigned i=0;i<new_events->size();i++) {
if((new_item=edit_events_list->findItem(new_events->at(i),0))==NULL) {
new_item=new Q3ListViewItem(edit_events_list);
}
UpdateItem(new_item,new_events->at(i));
}
}
}
void ListEvents::UpdateItem(Q3ListViewItem *item,QString name)
{
QString sql=WriteItemSql()+"where NAME=\""+RDEscapeString(name)+"\"";
RDSqlQuery *q=new RDSqlQuery(sql);
if(q->next()) {
item->setText(0,name);
WriteItem(item,q);
}
delete q;
}
void ListEvents::WriteItem(Q3ListViewItem *item,RDSqlQuery *q)
{
QPixmap *pix;
QPainter *p=new QPainter();
item->setText(0,q->value(0).toString());
item->setText(1,
RDLogLine::transText((RDLogLine::TransType)q->value(3).toUInt()));
item->setText(2,RDEventLine::
propertiesText(q->value(2).toInt(),
(RDLogLine::TransType)q->value(3).toUInt(),
(RDLogLine::TimeType)q->value(4).toUInt(),
q->value(5).toInt(),
RDBool(q->value(6).toString()),
(RDEventLine::ImportSource)q->value(7).toUInt(),
!q->value(8).toString().isEmpty()));
pix=new QPixmap(QSize(15,15));
p->begin(pix);
p->fillRect(0,0,15,15,QColor(q->value(1).toString()));
p->end();
item->setPixmap(0,*pix);
delete p;
}
QString ListEvents::WriteItemSql() const
{
QString sql=QString("select ")+
"NAME,"+ // 00
"COLOR,"+ // 01
"PREPOSITION,"+ // 02
"FIRST_TRANS_TYPE,"+ // 03
"TIME_TYPE,"+ // 04
"GRACE_TIME,"+ // 05
"USE_AUTOFILL,"+ // 06
"IMPORT_SOURCE,"+ // 07
"NESTED_EVENT "+ // 08
"from EVENTS ";
return sql;
}
int ListEvents::ActiveEvents(QString event_name,QString *clock_list)
{
int n=0;

View File

@ -2,7 +2,7 @@
//
// List Rivendell Log Events
//
// (C) Copyright 2002-2020 Fred Gleason <fredg@paravelsystems.com>
// (C) Copyright 2002-2021 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
@ -21,13 +21,13 @@
#ifndef LIST_EVENTS_H
#define LIST_EVENTS_H
#include <q3listview.h>
#include <qlabel.h>
#include <qcombobox.h>
#include <QComboBox>
#include <rddb.h>
#include <rddialog.h>
#include <rdtableview.h>
#include "eventlistmodel.h"
class ListEvents : public RDDialog
{
@ -42,7 +42,7 @@ class ListEvents : public RDDialog
void editData();
void deleteData();
void renameData();
void doubleClickedData(Q3ListViewItem *,const QPoint &,int);
void doubleClickedData(const QModelIndex &index);
void filterActivatedData(int id);
void closeData();
void okData();
@ -53,16 +53,12 @@ class ListEvents : public RDDialog
void closeEvent(QCloseEvent *e);
private:
void RefreshList();
void RefreshItem(Q3ListViewItem *item,std::vector<QString> *new_events=NULL);
void UpdateItem(Q3ListViewItem *item,QString name);
void WriteItem(Q3ListViewItem *item,RDSqlQuery *q);
QString WriteItemSql() const;
int ActiveEvents(QString event_name,QString *clock_list);
void DeleteEvent(QString event_name);
QString GetEventFilter(QString svc_name);
QString GetNoneFilter();
Q3ListView *edit_events_list;
RDTableView *edit_events_view;
EventListModel *edit_events_model;
QString *edit_eventname;
QLabel *edit_filter_label;
QComboBox *edit_filter_box;
@ -76,5 +72,4 @@ class ListEvents : public RDDialog
};
#endif
#endif // LIST_EVENTS_H

View File

@ -1310,11 +1310,11 @@ delete</source>
</message>
<message>
<source>Name</source>
<translation>Název</translation>
<translation type="obsolete">Název</translation>
</message>
<message>
<source>Properties</source>
<translation>Vlastnosti</translation>
<translation type="obsolete">Vlastnosti</translation>
</message>
<message>
<source>Color</source>
@ -1358,11 +1358,11 @@ delete</source>
</message>
<message>
<source>Event Exists</source>
<translation>Událost existuje</translation>
<translation type="unfinished">Událost existuje</translation>
</message>
<message>
<source>An event with that name already exists!</source>
<translation>Událost s tímto názvem již existuje!</translation>
<translation type="unfinished">Událost s tímto názvem již existuje!</translation>
</message>
<message>
<source>Are you sure you want to
@ -1371,7 +1371,7 @@ delete</source>
</message>
<message>
<source>Delete Event</source>
<translation>Smazat událost</translation>
<translation type="unfinished">Smazat událost</translation>
</message>
<message>
<source>is in use in the following clocks:</source>
@ -1379,11 +1379,11 @@ delete</source>
</message>
<message>
<source>Do you still want to delete it?</source>
<translation>Stále ještě chcete smazat?</translation>
<translation type="unfinished">Stále ještě chcete smazat?</translation>
</message>
<message>
<source>Event In Use</source>
<translation>Používaná událost</translation>
<translation type="unfinished">Používaná událost</translation>
</message>
<message>
<source>Log Events - User: </source>
@ -1401,10 +1401,6 @@ delete</source>
<source>is in use in the following clocks</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Trans</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ListGrids</name>

View File

@ -1310,11 +1310,11 @@ delete</source>
</message>
<message>
<source>Name</source>
<translation>Name</translation>
<translation type="obsolete">Name</translation>
</message>
<message>
<source>Properties</source>
<translation>Eigenschaften</translation>
<translation type="obsolete">Eigenschaften</translation>
</message>
<message>
<source>Color</source>
@ -1358,11 +1358,11 @@ delete</source>
</message>
<message>
<source>Event Exists</source>
<translation>Event existiert</translation>
<translation type="unfinished">Event existiert</translation>
</message>
<message>
<source>An event with that name already exists!</source>
<translation>Ein Event mit diesem Namen existiert bereits!</translation>
<translation type="unfinished">Ein Event mit diesem Namen existiert bereits!</translation>
</message>
<message>
<source>Are you sure you want to
@ -1371,7 +1371,7 @@ delete</source>
</message>
<message>
<source>Delete Event</source>
<translation>Event Löschen</translation>
<translation type="unfinished">Event Löschen</translation>
</message>
<message>
<source>is in use in the following clocks:</source>
@ -1379,11 +1379,11 @@ delete</source>
</message>
<message>
<source>Do you still want to delete it?</source>
<translation>Wollen Sie immernoch löschen?</translation>
<translation type="unfinished">Wollen Sie immernoch löschen?</translation>
</message>
<message>
<source>Event In Use</source>
<translation>Event in Verwendung</translation>
<translation type="unfinished">Event in Verwendung</translation>
</message>
<message>
<source>Log Events - User: </source>
@ -1401,10 +1401,6 @@ delete</source>
<source>is in use in the following clocks</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Trans</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ListGrids</name>

View File

@ -1313,11 +1313,11 @@ eliminar</translation>
</message>
<message>
<source>Name</source>
<translation>Nombre</translation>
<translation type="obsolete">Nombre</translation>
</message>
<message>
<source>Properties</source>
<translation>Propiedades</translation>
<translation type="obsolete">Propiedades</translation>
</message>
<message>
<source>Color</source>
@ -1353,11 +1353,11 @@ eliminar</translation>
</message>
<message>
<source>Event Exists</source>
<translation>El evento ya existe</translation>
<translation type="unfinished">El evento ya existe</translation>
</message>
<message>
<source>An event with that name already exists!</source>
<translation>¡Un evento con ese nombre ya existe!</translation>
<translation type="unfinished">¡Un evento con ese nombre ya existe!</translation>
</message>
<message>
<source>Are you sure you want to
@ -1367,7 +1367,7 @@ eliminar</translation>
</message>
<message>
<source>Delete Event</source>
<translation>Eliminar Evento</translation>
<translation type="unfinished">Eliminar Evento</translation>
</message>
<message>
<source>is in use in the following clocks:</source>
@ -1375,11 +1375,11 @@ eliminar</translation>
</message>
<message>
<source>Do you still want to delete it?</source>
<translation>¿Aún así desea eliminarla?</translation>
<translation type="unfinished">¿Aún así desea eliminarla?</translation>
</message>
<message>
<source>Event In Use</source>
<translation>El evento está en uso</translation>
<translation type="unfinished">El evento está en uso</translation>
</message>
<message>
<source>&amp;Rename</source>
@ -1405,10 +1405,6 @@ eliminar</translation>
<source>is in use in the following clocks</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Trans</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ListGrids</name>

View File

@ -1004,14 +1004,6 @@ Do you want to save?</source>
<source>Filter:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Name</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Properties</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&amp;Add</source>
<translation type="unfinished"></translation>
@ -1048,6 +1040,10 @@ Do you want to save?</source>
<source>NONE</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Log Events</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Event Exists</source>
<translation type="unfinished"></translation>
@ -1061,27 +1057,19 @@ Do you want to save?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Do you still want to delete it?</source>
<source>Are you sure you want to delete</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Event In Use</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Log Events</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Are you sure you want to delete</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>is in use in the following clocks</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Trans</source>
<source>Do you still want to delete it?</source>
<translation type="unfinished"></translation>
</message>
</context>

View File

@ -1316,11 +1316,11 @@ sletta</translation>
</message>
<message>
<source>Name</source>
<translation>Namn</translation>
<translation type="obsolete">Namn</translation>
</message>
<message>
<source>Properties</source>
<translation>Eigenskapar</translation>
<translation type="obsolete">Eigenskapar</translation>
</message>
<message>
<source>Color</source>
@ -1364,11 +1364,11 @@ sletta</translation>
</message>
<message>
<source>Event Exists</source>
<translation>Hendinga eksisterer</translation>
<translation type="unfinished">Hendinga eksisterer</translation>
</message>
<message>
<source>An event with that name already exists!</source>
<translation>Det finst alt ei hending med det namnet!</translation>
<translation type="unfinished">Det finst alt ei hending med det namnet!</translation>
</message>
<message>
<source>Are you sure you want to
@ -1378,7 +1378,7 @@ sletta</translation>
</message>
<message>
<source>Delete Event</source>
<translation>Slett hendinga</translation>
<translation type="unfinished">Slett hendinga</translation>
</message>
<message>
<source>is in use in the following clocks:</source>
@ -1386,11 +1386,11 @@ sletta</translation>
</message>
<message>
<source>Do you still want to delete it?</source>
<translation>Vil du framleis sletta?</translation>
<translation type="unfinished">Vil du framleis sletta?</translation>
</message>
<message>
<source>Event In Use</source>
<translation>Hendinga er i bruk</translation>
<translation type="unfinished">Hendinga er i bruk</translation>
</message>
<message>
<source>Are you sure you want to delete</source>
@ -1400,10 +1400,6 @@ sletta</translation>
<source>is in use in the following clocks</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Trans</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ListGrids</name>

View File

@ -1316,11 +1316,11 @@ sletta</translation>
</message>
<message>
<source>Name</source>
<translation>Namn</translation>
<translation type="obsolete">Namn</translation>
</message>
<message>
<source>Properties</source>
<translation>Eigenskapar</translation>
<translation type="obsolete">Eigenskapar</translation>
</message>
<message>
<source>Color</source>
@ -1364,11 +1364,11 @@ sletta</translation>
</message>
<message>
<source>Event Exists</source>
<translation>Hendinga eksisterer</translation>
<translation type="unfinished">Hendinga eksisterer</translation>
</message>
<message>
<source>An event with that name already exists!</source>
<translation>Det finst alt ei hending med det namnet!</translation>
<translation type="unfinished">Det finst alt ei hending med det namnet!</translation>
</message>
<message>
<source>Are you sure you want to
@ -1378,7 +1378,7 @@ sletta</translation>
</message>
<message>
<source>Delete Event</source>
<translation>Slett hendinga</translation>
<translation type="unfinished">Slett hendinga</translation>
</message>
<message>
<source>is in use in the following clocks:</source>
@ -1386,11 +1386,11 @@ sletta</translation>
</message>
<message>
<source>Do you still want to delete it?</source>
<translation>Vil du framleis sletta?</translation>
<translation type="unfinished">Vil du framleis sletta?</translation>
</message>
<message>
<source>Event In Use</source>
<translation>Hendinga er i bruk</translation>
<translation type="unfinished">Hendinga er i bruk</translation>
</message>
<message>
<source>Are you sure you want to delete</source>
@ -1400,10 +1400,6 @@ sletta</translation>
<source>is in use in the following clocks</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Trans</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ListGrids</name>

View File

@ -1317,11 +1317,11 @@ deletar</translation>
</message>
<message>
<source>Name</source>
<translation>Nome</translation>
<translation type="obsolete">Nome</translation>
</message>
<message>
<source>Properties</source>
<translation>Propriedades</translation>
<translation type="obsolete">Propriedades</translation>
</message>
<message>
<source>Color</source>
@ -1365,11 +1365,11 @@ deletar</translation>
</message>
<message>
<source>Event Exists</source>
<translation>Evento Existente</translation>
<translation type="unfinished">Evento Existente</translation>
</message>
<message>
<source>An event with that name already exists!</source>
<translation>Um Evento com este nome existe!</translation>
<translation type="unfinished">Um Evento com este nome existe!</translation>
</message>
<message>
<source>Are you sure you want to
@ -1379,7 +1379,7 @@ deletar</translation>
</message>
<message>
<source>Delete Event</source>
<translation>Deletar Evento</translation>
<translation type="unfinished">Deletar Evento</translation>
</message>
<message>
<source>is in use in the following clocks:</source>
@ -1387,11 +1387,11 @@ deletar</translation>
</message>
<message>
<source>Do you still want to delete it?</source>
<translation>Você ainda quer deletá-lo?</translation>
<translation type="unfinished">Você ainda quer deletá-lo?</translation>
</message>
<message>
<source>Event In Use</source>
<translation>Evento em Uso</translation>
<translation type="unfinished">Evento em Uso</translation>
</message>
<message>
<source>Log Events</source>
@ -1405,10 +1405,6 @@ deletar</translation>
<source>is in use in the following clocks</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Trans</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ListGrids</name>