Fixed conflict in 'ChangeLog'

This commit is contained in:
Fred Gleason 2019-03-01 14:26:48 -05:00
commit 83c7863ea9
24 changed files with 342 additions and 83 deletions

View File

@ -18510,3 +18510,9 @@
a host entry. a host entry.
2019-02-21 Patrick Linstruth <patrick@deltecent.com> 2019-02-21 Patrick Linstruth <patrick@deltecent.com>
* Fixed erase marker error in the 'Edit Audio' dialog. * Fixed erase marker error in the 'Edit Audio' dialog.
2019-03-01 Patrick Linstruth <patrick@deltecent.com>
* Moved artist separation in rdlogmanager(1) from clocks to events.
* Added ability to disable artist and title separation for an event.
* Incremented the database version to 307.
2019-03-01 Patrick Linstruth <patrick@deltecent.com>
* Updated schema map for version 3.0 to database version 307.

View File

@ -99,6 +99,7 @@ been ported to PyPAD:
| rlm_udp | pypad_udp.py | | | rlm_udp | pypad_udp.py | |
| rlm_urlwrite | pypad_urlwrite.py | | | rlm_urlwrite | pypad_urlwrite.py | |
| rlm_walltime | pypad_walltime.py | | | rlm_walltime | pypad_walltime.py | |
| | pypad_xcmd.py | New in Rivendell 3.0 |
| rlm_xds | pypad_xds.py | | | rlm_xds | pypad_xds.py | |
| rlm_xmpad | pypad_xmpad.py | | | rlm_xmpad | pypad_xmpad.py | |
-------------------------------------------------------------------------- --------------------------------------------------------------------------
@ -115,7 +116,7 @@ supports only v2 of the Spinitron API, configuration parameters that apply
only to the v1 API ('MajorVersion=', 'Station=' and 'Password=') are ignored. only to the v1 API ('MajorVersion=', 'Station=' and 'Password=') are ignored.
With these execptions, the RLM configuration is fully forward compatible. With these execptions, the RLM configuration is fully forward compatible.
9) Multicast Data 9) MULTICAST DATA
This version of Rivendell includes a new system for providing real-time This version of Rivendell includes a new system for providing real-time
status updates between Rivendell modules by means of multicast network status updates between Rivendell modules by means of multicast network
packets. The default subscription address for these updates is packets. The default subscription address for these updates is
@ -129,7 +130,7 @@ common TCP/IP subnet), this should 'just work', but those sites employing
hosts on disparate TCP/IP networks (multiple subnets, WAN links, etc) may hosts on disparate TCP/IP networks (multiple subnets, WAN links, etc) may
need to provision an appropriate multicast routing infrastructure. need to provision an appropriate multicast routing infrastructure.
10) Database Management 10) DATABASE MANAGEMENT
This version of Rivendell splits off database management tasks (creating, This version of Rivendell splits off database management tasks (creating,
updating, backing up and restoration) from rdadmin(1). Simple management updating, backing up and restoration) from rdadmin(1). Simple management
tasks can be done with the rddbconfig(8) GUI utility (available on the tasks can be done with the rddbconfig(8) GUI utility (available on the
@ -137,3 +138,10 @@ Rivendell->Configuration desktop menu), while advanced functionality is
available in the rddbmgr(8) command-line utility (do 'man 8 rddbmgr' for available in the rddbmgr(8) command-line utility (do 'man 8 rddbmgr' for
full documentation). The functions of the rdrevert(8) and rddbcheck(8) full documentation). The functions of the rdrevert(8) and rddbcheck(8)
utilites have also been subsumed into rddbmgr(8). utilites have also been subsumed into rddbmgr(8).
11) ARTIST SEPARATION
This version of Rivendell moves artist separation in rdlogmanager(1) from
clocks to events. The artist separation value from Rivendell 2.x is still
visible in the EditClock->SchedulerRules dialog but will not be used
by the "Generate Log" scheduler. New artist separation values will have
to be entered into each event.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 39 KiB

After

Width:  |  Height:  |  Size: 124 KiB

View File

@ -22,7 +22,8 @@ FIRST_TRANS_TYPE int(11)
DEFAULT_TRANS_TYPE int(11) DEFAULT_TRANS_TYPE int(11)
COLOR varchar(7) COLOR varchar(7)
SCHED_GROUP varchar(10) SCHED_GROUP varchar(10)
TITLE_SEP int(10) unsigned ARTIST_SEP int(10)
TITLE_SEP int(10)
HAVE_CODE varchar(10) HAVE_CODE varchar(10)
HAVE_CODE2 varchar(10) HAVE_CODE2 varchar(10)
HOR_SEP int(10) unsigned HOR_SEP int(10) unsigned

View File

@ -2,7 +2,7 @@
// //
// The Current Database Schema Version for Rivendell // The Current Database Schema Version for Rivendell
// //
// (C) Copyright 2002-2016 Fred Gleason <fredg@paravelsystems.com> // (C) Copyright 2002-2019 Fred Gleason <fredg@paravelsystems.com>
// //
// This program is free software; you can redistribute it and/or modify // 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 // it under the terms of the GNU General Public License version 2 as
@ -24,7 +24,7 @@
/* /*
* Current Database Version * Current Database Version
*/ */
#define RD_VERSION_DATABASE 306 #define RD_VERSION_DATABASE 307
#endif // DBVERSION_H #endif // DBVERSION_H

View File

@ -324,7 +324,7 @@ bool RDClock::generateLog(int hour,const QString &logname,
eventline.setStartTime(QTime().addMSecs(q->value(1).toInt()). eventline.setStartTime(QTime().addMSecs(q->value(1).toInt()).
addSecs(3600*hour)); addSecs(3600*hour));
eventline.setLength(q->value(2).toInt()); eventline.setLength(q->value(2).toInt());
eventline.generateLog(logname,svc_name,errors,artistsep,clock_name); eventline.generateLog(logname,svc_name,errors,clock_name);
eventline.clear(); eventline.clear();
} }
delete q; delete q;

View File

@ -40,6 +40,7 @@ RDEvent::RDEvent(const QString &name,bool create)
delete q; delete q;
sql=QString("insert into EVENTS set ")+ sql=QString("insert into EVENTS set ")+
"NAME=\""+RDEscapeString(event_name)+"\","+ "NAME=\""+RDEscapeString(event_name)+"\","+
"ARTIST_SEP=15,"+
"TITLE_SEP=100"; "TITLE_SEP=100";
q=new RDSqlQuery(sql); q=new RDSqlQuery(sql);
delete q; delete q;
@ -398,13 +399,26 @@ void RDEvent::setHaveCode2(QString str)
SetRow("HAVE_CODE2",str,true); SetRow("HAVE_CODE2",str,true);
} }
unsigned RDEvent::titleSep()
int RDEvent::artistSep()
{
return GetIntValue("ARTIST_SEP");
}
void RDEvent::setArtistSep(int artistsep)
{
SetRow("ARTIST_SEP",artistsep);
}
int RDEvent::titleSep()
{ {
return GetIntValue("TITLE_SEP"); return GetIntValue("TITLE_SEP");
} }
void RDEvent::setTitleSep(unsigned titlesep) void RDEvent::setTitleSep(int titlesep)
{ {
SetRow("TITLE_SEP",titlesep); SetRow("TITLE_SEP",titlesep);
} }

View File

@ -73,8 +73,10 @@ class RDEvent
void setHaveCode(QString str); void setHaveCode(QString str);
QString HaveCode2(); QString HaveCode2();
void setHaveCode2(QString str); void setHaveCode2(QString str);
unsigned titleSep(); int artistSep();
void setTitleSep(unsigned titlesep); void setArtistSep(int artistsep);
int titleSep();
void setTitleSep(int titlesep);
private: private:
int GetIntValue(const QString &field) const; int GetIntValue(const QString &field) const;

View File

@ -316,6 +316,7 @@ void RDEventLine::clear()
event_sched_group=""; event_sched_group="";
event_have_code=""; event_have_code="";
event_have_code2=""; event_have_code2="";
event_artist_sep=15;
event_title_sep=100; event_title_sep=100;
event_nested_event=""; event_nested_event="";
} }
@ -340,9 +341,10 @@ bool RDEventLine::load()
"AUTOFILL_SLOP,"+ // 13 "AUTOFILL_SLOP,"+ // 13
"NESTED_EVENT,"+ // 14 "NESTED_EVENT,"+ // 14
"SCHED_GROUP,"+ // 15 "SCHED_GROUP,"+ // 15
"TITLE_SEP,"+ // 16 "ARTIST_SEP,"+ // 16
"HAVE_CODE,"+ // 17 "TITLE_SEP,"+ // 17
"HAVE_CODE2 "+ // 18 "HAVE_CODE,"+ // 18
"HAVE_CODE2 "+ // 19
"from EVENTS where "+ "from EVENTS where "+
"NAME=\""+RDEscapeString(event_name)+"\""; "NAME=\""+RDEscapeString(event_name)+"\"";
RDSqlQuery *q=new RDSqlQuery(sql); RDSqlQuery *q=new RDSqlQuery(sql);
@ -373,9 +375,10 @@ bool RDEventLine::load()
event_autofill_slop=q->value(13).toInt(); event_autofill_slop=q->value(13).toInt();
event_nested_event=q->value(14).toString(); event_nested_event=q->value(14).toString();
event_sched_group=q->value(15).toString(); event_sched_group=q->value(15).toString();
event_title_sep=q->value(16).toUInt(); event_artist_sep=q->value(16).toInt();
event_have_code=q->value(17).toString(); event_title_sep=q->value(17).toInt();
event_have_code2=q->value(18).toString(); event_have_code=q->value(18).toString();
event_have_code2=q->value(19).toString();
delete q; delete q;
event_preimport_list->load(); event_preimport_list->load();
@ -407,6 +410,7 @@ bool RDEventLine::save(RDConfig *config)
QString().sprintf("AUTOFILL_SLOP=%d,",event_autofill_slop)+ QString().sprintf("AUTOFILL_SLOP=%d,",event_autofill_slop)+
"NESTED_EVENT=\""+RDEscapeString(event_nested_event)+"\","+ "NESTED_EVENT=\""+RDEscapeString(event_nested_event)+"\","+
"SCHED_GROUP=\""+RDEscapeString(event_sched_group)+"\","+ "SCHED_GROUP=\""+RDEscapeString(event_sched_group)+"\","+
QString().sprintf("ARTIST_SEP=%d,",event_artist_sep)+
QString().sprintf("TITLE_SEP=%d,",event_title_sep)+ QString().sprintf("TITLE_SEP=%d,",event_title_sep)+
"HAVE_CODE=\""+RDEscapeString(event_have_code)+"\","+ "HAVE_CODE=\""+RDEscapeString(event_have_code)+"\","+
"HAVE_CODE2=\""+RDEscapeString(event_have_code2)+"\" "+ "HAVE_CODE2=\""+RDEscapeString(event_have_code2)+"\" "+
@ -446,8 +450,7 @@ bool RDEventLine::save(RDConfig *config)
bool RDEventLine::generateLog(QString logname,const QString &svcname, bool RDEventLine::generateLog(QString logname,const QString &svcname,
QString *report, unsigned artistsep, QString *report, QString clockname)
QString clockname)
{ {
QString sql; QString sql;
RDSqlQuery *q; RDSqlQuery *q;
@ -582,6 +585,7 @@ bool RDEventLine::generateLog(QString logname,const QString &svcname,
// Scheduler // Scheduler
if(event_import_source == RDEventLine::Scheduler) { if(event_import_source == RDEventLine::Scheduler) {
int artistsep;
int titlesep; int titlesep;
int stackid; int stackid;
int counter; int counter;
@ -591,7 +595,10 @@ bool RDEventLine::generateLog(QString logname,const QString &svcname,
svcname_rp.replace(" ","_"); svcname_rp.replace(" ","_");
time.addMSecs(postimport_length); time.addMSecs(postimport_length);
//
// Load all carts with requested scheduler codes into schedCL
//
sql=QString("select NUMBER,ARTIST from CART"); sql=QString("select NUMBER,ARTIST from CART");
if(event_have_code!="") { if(event_have_code!="") {
sql+=" INNER JOIN CART_SCHED_CODES AS S1 on (NUMBER=S1.CART_NUMBER AND S1.SCHED_CODE='"+RDEscapeString(event_have_code)+"')"; sql+=" INNER JOIN CART_SCHED_CODES AS S1 on (NUMBER=S1.CART_NUMBER AND S1.SCHED_CODE='"+RDEscapeString(event_have_code)+"')";
@ -602,15 +609,20 @@ bool RDEventLine::generateLog(QString logname,const QString &svcname,
sql+=" where GROUP_NAME='"+RDEscapeString(SchedGroup())+"'"; sql+=" where GROUP_NAME='"+RDEscapeString(SchedGroup())+"'";
q=new RDSqlQuery(sql); q=new RDSqlQuery(sql);
if(q->size()>0) { if(q->size()>0) {
if(event_title_sep>=0 && event_title_sep<=50000) if(event_artist_sep>=-1 && event_artist_sep<=50000) {
{ artistsep = event_artist_sep;
titlesep = (int)event_title_sep;
} }
else else {
{ artistsep = 15;
}
if(event_title_sep>=-1 && event_title_sep<=50000) {
titlesep = event_title_sep;
}
else {
titlesep = 100; titlesep = 100;
} }
int querysize=(int)q->size(); int querysize=(int)q->size();
SchedCartList *schedCL; SchedCartList *schedCL;
schedCL=new SchedCartList(querysize); schedCL=new SchedCartList(querysize);
@ -623,6 +635,9 @@ bool RDEventLine::generateLog(QString logname,const QString &svcname,
} }
delete q; delete q;
//
// Get next stack id from the stack
//
sql=QString("select ")+ sql=QString("select ")+
"MAX(SCHED_STACK_ID) "+ "MAX(SCHED_STACK_ID) "+
"from STACK_LINES where "+ "from STACK_LINES where "+
@ -640,56 +655,75 @@ bool RDEventLine::generateLog(QString logname,const QString &svcname,
delete q; delete q;
// Add deconflicting rules here //////////////////////////////////
// Title separation // //
schedCL->save(); // Add deconflicting rules here //
sql=QString("select CART from STACK_LINES where ")+ // //
"SERVICE_NAME=\""+RDEscapeString(svcname)+"\" && "+ //////////////////////////////////
QString().sprintf("SCHED_STACK_ID >= %d",stackid-titlesep);
q=new RDSqlQuery(sql); //
while (q->next()) { // Title separation
for(counter=0;counter<schedCL->getNumberOfItems();counter++) { //
if(q->value(0).toUInt()==schedCL->getItemCartnumber(counter)) { // Iterate through schedCL and remove carts from schedCL that
schedCL->removeItem(counter); // match cart number on the stack essentially removing matched titles.
counter--; //
} if(titlesep>=0) {
} schedCL->save();
} sql=QString("select CART from STACK_LINES where ")+
delete q; "SERVICE_NAME=\""+RDEscapeString(svcname)+"\" && "+
if(schedCL->getNumberOfItems()==0) { QString().sprintf("SCHED_STACK_ID >= %d",stackid-titlesep);
*report+=time.toString("hh:mm:ss")+" "+ q=new RDSqlQuery(sql);
QObject::tr("Rule broken: Title separation"); while (q->next()) {
if(!HaveCode().isEmpty()) { for(counter=0;counter<schedCL->getNumberOfItems();counter++) {
*report+=QObject::tr(" with sched code(s): ")+HaveCode()+" "+HaveCode2(); if(q->value(0).toUInt()==schedCL->getItemCartnumber(counter)) {
schedCL->removeItem(counter);
counter--;
}
}
} }
*report+="\n"; delete q;
if(schedCL->getNumberOfItems()==0) {
*report+=time.toString("hh:mm:ss")+" "+
QObject::tr("Rule broken: Title separation");
if(!HaveCode().isEmpty()) {
*report+=QObject::tr(" with sched code(s): ")+HaveCode()+" "+HaveCode2();
}
*report+="\n";
}
schedCL->restore();
} }
schedCL->restore();
//
// Artist separation // Artist separation
schedCL->save(); //
sql=QString("select ARTIST from STACK_LINES where ")+ // Iterate through schedCL and remove carts from schedCL that
"SERVICE_NAME=\""+RDEscapeString(svcname)+"\" && "+ // match artist on the stack.
QString().sprintf("SCHED_STACK_ID >= %d",stackid-artistsep); //
q=new RDSqlQuery(sql); if(artistsep>=0) {
while (q->next()) { schedCL->save();
for(counter=0;counter<schedCL->getNumberOfItems();counter++) { sql=QString("select ARTIST from STACK_LINES where ")+
if(q->value(0).toString()==schedCL->getItemArtist(counter)) { "SERVICE_NAME=\""+RDEscapeString(svcname)+"\" && "+
schedCL->removeItem(counter); QString().sprintf("SCHED_STACK_ID >= %d",stackid-artistsep);
counter--; q=new RDSqlQuery(sql);
} while (q->next()) {
} for(counter=0;counter<schedCL->getNumberOfItems();counter++) {
} if(q->value(0).toString()==schedCL->getItemArtist(counter)) {
delete q; schedCL->removeItem(counter);
if(schedCL->getNumberOfItems()==0) { counter--;
*report+=time.toString("hh:mm:ss")+" "+ }
QObject::tr("Rule broken: Artist separation"); }
if(!HaveCode().isEmpty()) { }
*report+=QObject::tr(" with sched code(s): ")+HaveCode()+" "+HaveCode2(); delete q;
if(schedCL->getNumberOfItems()==0) {
*report+=time.toString("hh:mm:ss")+" "+
QObject::tr("Rule broken: Artist separation");
if(!HaveCode().isEmpty()) {
*report+=QObject::tr(" with sched code(s): ")+HaveCode()+" "+HaveCode2();
}
*report+="\n";
} }
*report+="\n"; schedCL->restore();
} }
schedCL->restore();
// Scheduler Codes // Scheduler Codes
sql=QString("select ")+ sql=QString("select ")+
@ -811,9 +845,17 @@ bool RDEventLine::generateLog(QString logname,const QString &svcname,
} }
delete q; delete q;
// end of deconflicting rules ////////////////////////////////
// //
// End of deconflicting rules //
// //
////////////////////////////////
int schedpos=rand()%schedCL->getNumberOfItems(); //
// Pick a random cart from those that are remaining.
//
int r=rand();
int schedpos=r%schedCL->getNumberOfItems();
sql=QString("insert into LOG_LINES set ")+ sql=QString("insert into LOG_LINES set ")+
"LOG_NAME=\""+RDEscapeString(logname)+"\","+ "LOG_NAME=\""+RDEscapeString(logname)+"\","+
QString().sprintf("LINE_ID=%d,",count)+ QString().sprintf("LINE_ID=%d,",count)+

View File

@ -2,7 +2,7 @@
// //
// Abstract a Rivendell Log Manager Event // Abstract a Rivendell Log Manager Event
// //
// (C) Copyright 2002-2018 Fred Gleason <fredg@paravelsystems.com> // (C) Copyright 2002-2019 Fred Gleason <fredg@paravelsystems.com>
// //
// This program is free software; you can redistribute it and/or modify // 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 // it under the terms of the GNU General Public License version 2 as
@ -81,7 +81,7 @@ class RDEventLine
bool load(); bool load();
bool save(RDConfig *config); bool save(RDConfig *config);
bool generateLog(QString logname,const QString &svcname, bool generateLog(QString logname,const QString &svcname,
QString *errors, unsigned artistsep,QString clockname); QString *errors,QString clockname);
bool linkLog(RDLogEvent *e,RDLog *log,const QString &svcname, bool linkLog(RDLogEvent *e,RDLog *log,const QString &svcname,
RDLogLine *link_logline,const QString &track_str, RDLogLine *link_logline,const QString &track_str,
const QString &label_cart,const QString &track_cart, const QString &label_cart,const QString &track_cart,
@ -112,7 +112,8 @@ class RDEventLine
QString event_sched_group; QString event_sched_group;
QString event_have_code; QString event_have_code;
QString event_have_code2; QString event_have_code2;
unsigned event_title_sep; int event_artist_sep;
int event_title_sep;
RDStation *event_station; RDStation *event_station;
}; };

View File

@ -464,26 +464,50 @@ EditEvent::EditEvent(QString eventname,bool new_event,
} }
delete q2; delete q2;
// Artist Separation SpinBox
event_artist_sep_label=new QLabel(tr("Artist Separation"),this);
event_artist_sep_label->setFont(bold_font);
event_artist_sep_label->setGeometry(CENTER_LINE+420,383,100,20);
event_artist_sep_spinbox=new QSpinBox(this);
event_artist_sep_spinbox->setGeometry(CENTER_LINE+510,383,53,20);
event_artist_sep_spinbox->setMinValue( -1 );
event_artist_sep_spinbox->setMaxValue( 50000 );
event_artist_sep_spinbox->setSpecialValueText("None");
event_artist_none_button=new QPushButton(this);
event_artist_none_button->setGeometry(CENTER_LINE+570,383,40,20);
event_artist_none_button->setFont(font);
event_artist_none_button->setText(tr("None"));
connect(event_artist_none_button,SIGNAL(clicked()),this,SLOT(artistData()));
// Title Separation SpinBox // Title Separation SpinBox
event_title_sep_label=new QLabel(tr("Title Separation"),this); event_title_sep_label=new QLabel(tr("Title Separation"),this);
event_title_sep_label->setFont(bold_font); event_title_sep_label->setFont(bold_font);
event_title_sep_label->setGeometry(CENTER_LINE+420,383,100,20); event_title_sep_label->setGeometry(CENTER_LINE+420,404,100,20);
event_title_sep_spinbox=new QSpinBox(this); event_title_sep_spinbox=new QSpinBox(this);
event_title_sep_spinbox->setGeometry(CENTER_LINE+510,383,50,20); event_title_sep_spinbox->setGeometry(CENTER_LINE+510,404,53,20);
event_title_sep_spinbox->setMinValue( 0 ); event_title_sep_spinbox->setMinValue( -1 );
event_title_sep_spinbox->setMaxValue( 50000 ); event_title_sep_spinbox->setMaxValue( 50000 );
event_title_sep_spinbox->setSpecialValueText("None");
event_title_none_button=new QPushButton(this);
event_title_none_button->setGeometry(CENTER_LINE+570,404,40,20);
event_title_none_button->setFont(font);
event_title_none_button->setText(tr("None"));
connect(event_title_none_button,SIGNAL(clicked()),this,SLOT(titleData()));
// Must have code.. // Must have code..
event_have_code_label=new QLabel(tr("Must have code"),this); event_have_code_label=new QLabel(tr("Must have code"),this);
event_have_code_label->setFont(bold_font); event_have_code_label->setFont(bold_font);
event_have_code_label->setGeometry(CENTER_LINE+420,404,100,20); event_have_code_label->setGeometry(CENTER_LINE+420,427,100,20);
event_have_code_box=new QComboBox(this); event_have_code_box=new QComboBox(this);
event_have_code_box->setGeometry(CENTER_LINE+510,404,100,20); event_have_code_box->setGeometry(CENTER_LINE+510,427,100,20);
event_have_code_box->insertItem(""); event_have_code_box->insertItem("");
sql2="select CODE from SCHED_CODES order by CODE"; sql2="select CODE from SCHED_CODES order by CODE";
q2=new RDSqlQuery(sql2); q2=new RDSqlQuery(sql2);
@ -496,10 +520,10 @@ EditEvent::EditEvent(QString eventname,bool new_event,
event_have_code2_label=new QLabel(tr("and code"),this); event_have_code2_label=new QLabel(tr("and code"),this);
event_have_code2_label->setFont(bold_font); event_have_code2_label->setFont(bold_font);
event_have_code2_label->setGeometry(CENTER_LINE+420,425,100,20); event_have_code2_label->setGeometry(CENTER_LINE+420,448,100,20);
event_have_code2_box=new QComboBox(this); event_have_code2_box=new QComboBox(this);
event_have_code2_box->setGeometry(CENTER_LINE+510,425,100,20); event_have_code2_box->setGeometry(CENTER_LINE+510,448,100,20);
event_have_code2_box->insertItem(""); event_have_code2_box->insertItem("");
sql2="select CODE from SCHED_CODES order by CODE"; sql2="select CODE from SCHED_CODES order by CODE";
q2=new RDSqlQuery(sql2); q2=new RDSqlQuery(sql2);
@ -764,6 +788,7 @@ EditEvent::EditEvent(QString eventname,bool new_event,
if(!event_event->schedGroup().isEmpty()) { if(!event_event->schedGroup().isEmpty()) {
event_sched_group_box->setCurrentText(event_event->schedGroup()); event_sched_group_box->setCurrentText(event_event->schedGroup());
} }
event_artist_sep_spinbox->setValue(event_event->artistSep());
event_title_sep_spinbox->setValue(event_event->titleSep()); event_title_sep_spinbox->setValue(event_event->titleSep());
event_have_code_box->setCurrentText(event_event->HaveCode()); event_have_code_box->setCurrentText(event_event->HaveCode());
event_have_code2_box->setCurrentText(event_event->HaveCode2()); event_have_code2_box->setCurrentText(event_event->HaveCode2());
@ -1032,8 +1057,12 @@ void EditEvent::importClickedData(int id)
event_nestevent_unit->setEnabled(state); event_nestevent_unit->setEnabled(state);
SetPostTransition(); SetPostTransition();
event_sched_group_box->setEnabled(stateschedinv); event_sched_group_box->setEnabled(stateschedinv);
event_artist_sep_label->setEnabled(stateschedinv);
event_artist_sep_spinbox->setEnabled(stateschedinv);
event_artist_none_button->setEnabled(stateschedinv);
event_title_sep_label->setEnabled(stateschedinv); event_title_sep_label->setEnabled(stateschedinv);
event_title_sep_spinbox->setEnabled(stateschedinv); event_title_sep_spinbox->setEnabled(stateschedinv);
event_title_none_button->setEnabled(stateschedinv);
event_have_code_box->setEnabled(stateschedinv); event_have_code_box->setEnabled(stateschedinv);
event_have_code_label->setEnabled(stateschedinv); event_have_code_label->setEnabled(stateschedinv);
event_have_code2_box->setEnabled(stateschedinv); event_have_code2_box->setEnabled(stateschedinv);
@ -1143,6 +1172,18 @@ void EditEvent::postimportLengthChangedData(int msecs)
} }
void EditEvent::artistData()
{
event_artist_sep_spinbox->setValue(-1);
}
void EditEvent::titleData()
{
event_title_sep_spinbox->setValue(-1);
}
void EditEvent::saveData() void EditEvent::saveData()
{ {
Save(); Save();
@ -1253,7 +1294,7 @@ void EditEvent::paintEvent(QPaintEvent *e)
QPainter *p=new QPainter(this); QPainter *p=new QPainter(this);
p->setPen(Qt::black); p->setPen(Qt::black);
p->drawLine(CENTER_LINE,10,CENTER_LINE,sizeHint().height()-10); p->drawLine(CENTER_LINE,10,CENTER_LINE,sizeHint().height()-10);
p->drawLine(CENTER_LINE+408,383,CENTER_LINE+408,450); p->drawLine(CENTER_LINE+408,383,CENTER_LINE+408,465);
p->end(); p->end();
} }
@ -1433,6 +1474,7 @@ void EditEvent::Save()
} }
event_event->setProperties(GetProperties()); event_event->setProperties(GetProperties());
event_event->setSchedGroup(event_sched_group_box->currentText()); event_event->setSchedGroup(event_sched_group_box->currentText());
event_event->setArtistSep(event_artist_sep_spinbox->value());
event_event->setTitleSep(event_title_sep_spinbox->value()); event_event->setTitleSep(event_title_sep_spinbox->value());
event_event->setHaveCode(event_have_code_box->currentText()); event_event->setHaveCode(event_have_code_box->currentText());
if (event_have_code_box->currentText() != QString("")) { if (event_have_code_box->currentText() != QString("")) {

View File

@ -79,6 +79,8 @@ class EditEvent : public QDialog
void postimportUpData(); void postimportUpData();
void postimportDownData(); void postimportDownData();
void postimportLengthChangedData(int msecs); void postimportLengthChangedData(int msecs);
void artistData();
void titleData();
void saveData(); void saveData();
void saveAsData(); void saveAsData();
void svcData(); void svcData();
@ -103,8 +105,12 @@ class EditEvent : public QDialog
QButtonGroup *event_lib_type_group; QButtonGroup *event_lib_type_group;
QComboBox *event_group_box; QComboBox *event_group_box;
QComboBox *event_sched_group_box; QComboBox *event_sched_group_box;
QSpinBox* event_artist_sep_spinbox;
QLabel *event_artist_sep_label;
QPushButton *event_artist_none_button;
QSpinBox* event_title_sep_spinbox; QSpinBox* event_title_sep_spinbox;
QLabel *event_title_sep_label; QLabel *event_title_sep_label;
QPushButton *event_title_none_button;
QComboBox* event_have_code_box; QComboBox* event_have_code_box;
QLabel *event_have_code_label; QLabel *event_have_code_label;
QComboBox* event_have_code2_box; QComboBox* event_have_code2_box;

View File

@ -69,12 +69,18 @@ EditSchedRules::EditSchedRules(QString clock,unsigned *artistsep,SchedRulesList
artistSepLabel->setGeometry( QRect( 10, 10, 130, 20 ) ); artistSepLabel->setGeometry( QRect( 10, 10, 130, 20 ) );
artistSepLabel->setFont(font); artistSepLabel->setFont(font);
artistSepLabel->setText(tr("Artist Separation:")); artistSepLabel->setText(tr("Artist Separation:"));
artistSepLabel->setEnabled(false);
artistSepSpinBox = new QSpinBox(this); artistSepSpinBox = new QSpinBox(this);
artistSepSpinBox->setGeometry( QRect( 160, 10, 70, 20 ) ); artistSepSpinBox->setGeometry( QRect( 160, 10, 70, 20 ) );
artistSepSpinBox->setMaxValue( 10000 ); artistSepSpinBox->setMaxValue( 10000 );
artistSepSpinBox->setValue( *edit_artistsep ); artistSepSpinBox->setValue( *edit_artistsep );
artistSepSpinBox->setEnabled(false);
QLabel *artistSepDep=
new QLabel(this,tr("(This setting is deprecated and has been moved to events)"),this);
artistSepDep->setFont(font);
artistSepDep->setGeometry(240,10,540,20);
// //
// Edit Button // Edit Button

View File

@ -587,6 +587,10 @@ Chcete ji přepsat?</translation>
<source>Count</source> <source>Count</source>
<translation type="unfinished">Počet</translation> <translation type="unfinished">Počet</translation>
</message> </message>
<message>
<source>Artist Separation</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>EditEventLine</name> <name>EditEventLine</name>
@ -787,6 +791,14 @@ Chcete je uložit?</translation>
<source>Import Rules from Clock</source> <source>Import Rules from Clock</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>None</source>
<translation type="obsolete">Žádný</translation>
</message>
<message>
<source>(This setting is deprecated and has been moved to events)</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>EditTrack</name> <name>EditTrack</name>

View File

@ -587,6 +587,10 @@ Wollen Sie es überschreiben?</translation>
<source>Count</source> <source>Count</source>
<translation type="unfinished">Zähler</translation> <translation type="unfinished">Zähler</translation>
</message> </message>
<message>
<source>Artist Separation</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>EditEventLine</name> <name>EditEventLine</name>
@ -787,6 +791,14 @@ Wollen Sie sie speichern?</translation>
<source>Import Rules from Clock</source> <source>Import Rules from Clock</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>None</source>
<translation type="obsolete">Keine</translation>
</message>
<message>
<source>(This setting is deprecated and has been moved to events)</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>EditTrack</name> <name>EditTrack</name>

View File

@ -589,6 +589,10 @@ Do you want to overwrite it?</source>
<source>Count</source> <source>Count</source>
<translation type="unfinished">Cuenta</translation> <translation type="unfinished">Cuenta</translation>
</message> </message>
<message>
<source>Artist Separation</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>EditEventLine</name> <name>EditEventLine</name>
@ -789,6 +793,14 @@ Do you want to save?</source>
<source>Import Rules from Clock</source> <source>Import Rules from Clock</source>
<translation>Importar reglas desde Torta</translation> <translation>Importar reglas desde Torta</translation>
</message> </message>
<message>
<source>None</source>
<translation type="obsolete">Ninguno</translation>
</message>
<message>
<source>(This setting is deprecated and has been moved to events)</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>EditTrack</name> <name>EditTrack</name>

View File

@ -525,6 +525,10 @@ Do you want to overwrite it?</source>
<source>Count</source> <source>Count</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>Artist Separation</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>EditEventLine</name> <name>EditEventLine</name>
@ -719,6 +723,10 @@ Do you want to save?</source>
<source>Import Rules from Clock</source> <source>Import Rules from Clock</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>(This setting is deprecated and has been moved to events)</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>EditTrack</name> <name>EditTrack</name>

View File

@ -596,6 +596,10 @@ Vil du byta henne ut?</translation>
<source>Count</source> <source>Count</source>
<translation type="unfinished">Tellign</translation> <translation type="unfinished">Tellign</translation>
</message> </message>
<message>
<source>Artist Separation</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>EditEventLine</name> <name>EditEventLine</name>
@ -796,6 +800,14 @@ Vil du lagra?</translation>
<source>Import Rules from Clock</source> <source>Import Rules from Clock</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>None</source>
<translation type="obsolete">Ingen</translation>
</message>
<message>
<source>(This setting is deprecated and has been moved to events)</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>EditTrack</name> <name>EditTrack</name>

View File

@ -596,6 +596,10 @@ Vil du byta henne ut?</translation>
<source>Count</source> <source>Count</source>
<translation type="unfinished">Tellign</translation> <translation type="unfinished">Tellign</translation>
</message> </message>
<message>
<source>Artist Separation</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>EditEventLine</name> <name>EditEventLine</name>
@ -796,6 +800,14 @@ Vil du lagra?</translation>
<source>Import Rules from Clock</source> <source>Import Rules from Clock</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>None</source>
<translation type="obsolete">Ingen</translation>
</message>
<message>
<source>(This setting is deprecated and has been moved to events)</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>EditTrack</name> <name>EditTrack</name>

View File

@ -589,6 +589,10 @@ Você quer sobreescrêve-lo?</translation>
<source>Count</source> <source>Count</source>
<translation type="unfinished">Contador</translation> <translation type="unfinished">Contador</translation>
</message> </message>
<message>
<source>Artist Separation</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>EditEventLine</name> <name>EditEventLine</name>
@ -789,6 +793,14 @@ Você quer salvar?</translation>
<source>Import Rules from Clock</source> <source>Import Rules from Clock</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>None</source>
<translation type="obsolete">Nenhum</translation>
</message>
<message>
<source>(This setting is deprecated and has been moved to events)</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>EditTrack</name> <name>EditTrack</name>

View File

@ -93,6 +93,7 @@ class MainObject : public QObject
bool UpdateLogTable186(const QString &table,QString *err_msg) const; bool UpdateLogTable186(const QString &table,QString *err_msg) const;
bool ConvertTimeField186(const QString &table,const QString &field, bool ConvertTimeField186(const QString &table,const QString &field,
QString *err_msg) const; QString *err_msg) const;
bool ConvertArtistSep307(QString *err_msg) const;
// //
// revertschema.cpp // revertschema.cpp

View File

@ -40,6 +40,16 @@ bool MainObject::RevertSchema(int cur_schema,int set_schema,QString *err_msg)
// NEW SCHEMA REVERSIONS GO HERE... // NEW SCHEMA REVERSIONS GO HERE...
if((cur_schema==307)&&(set_schema>cur_schema)) {
DropColumn("EVENTS","ARTIST_SEP");
sql="alter table `EVENTS` modify column `TITLE_SEP` int(10) unsigned";
if(!RDSqlQuery::apply(sql,err_msg)) {
return false;
}
WriteSchemaVersion(--cur_schema);
}
// //
// Revert 306 // Revert 306
// //

View File

@ -156,7 +156,7 @@ void MainObject::InitializeSchemaMap() {
global_version_map["2.17"]=268; global_version_map["2.17"]=268;
global_version_map["2.18"]=272; global_version_map["2.18"]=272;
global_version_map["2.19"]=275; global_version_map["2.19"]=275;
global_version_map["3.0"]=306; global_version_map["3.0"]=307;
} }

View File

@ -9681,6 +9681,23 @@ bool MainObject::UpdateSchema(int cur_schema,int set_schema,QString *err_msg)
WriteSchemaVersion(++cur_schema); WriteSchemaVersion(++cur_schema);
} }
if((cur_schema<307)&&(set_schema>cur_schema)) {
sql=QString("alter table EVENTS add column ")+
"ARTIST_SEP int(10) after SCHED_GROUP";
if(!RDSqlQuery::apply(sql,err_msg)) {
return false;
}
sql="alter table EVENTS modify column TITLE_SEP int(10)";
if(!RDSqlQuery::apply(sql,err_msg)) {
return false;
}
if (!ConvertArtistSep307(err_msg)) {
return false;
}
WriteSchemaVersion(++cur_schema);
}
// NEW SCHEMA UPDATES GO HERE... // NEW SCHEMA UPDATES GO HERE...
@ -9929,3 +9946,26 @@ bool MainObject::ConvertTimeField186(const QString &table,const QString &field,
return true; return true;
} }
bool MainObject::ConvertArtistSep307(QString *err_msg) const
{
QString sql;
RDSqlQuery *q;
int max=-1;
sql=QString("select ARTISTSEP from CLOCKS");
q=new RDSqlQuery(sql,false);
while(q->next()) {
if(q->value(0).toInt()>max) {
max=q->value(0).toInt();
}
}
delete q;
sql=QString().sprintf("update EVENTS set ARTIST_SEP=%d",max);
if(!RDSqlQuery::apply(sql,err_msg)) {
return false;
}
return true;
}