diff --git a/ChangeLog b/ChangeLog index e4e38df4..245c7688 100644 --- a/ChangeLog +++ b/ChangeLog @@ -24645,3 +24645,10 @@ 2024-02-07 Fred Gleason * Added the option to provision users from an existing RSS feed to the 'Add RSS Feed' dialog in rdadmin(1). +2024-02-08 Fred Gleason + * Added 'RDTimeEdit::Mode' enumeration. + * Added 'RDTimeEdit::mode()', 'RDTimeEdit::setMode()', + 'RDTimeEdit::length()' and 'RDTimeEdit::setLength()' methods. + * Fixed a regression in rdlibrary(1) that caused the 'Forced Length' + control in the 'Edit Cart' dialog to be misformatted when the + system was configured to use 12 hour time format. diff --git a/lib/rdtimeedit.cpp b/lib/rdtimeedit.cpp index 7754f924..07e858c8 100644 --- a/lib/rdtimeedit.cpp +++ b/lib/rdtimeedit.cpp @@ -2,7 +2,7 @@ // // A QTimeEdit with tenth-second precision. // -// (C) Copyright 2003-2021 Fred Gleason +// (C) Copyright 2003-2024 Fred Gleason // // 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 @@ -27,6 +27,7 @@ RDTimeEdit::RDTimeEdit(QWidget *parent) : QTimeEdit(parent) { + d_mode=RDTimeEdit::TimeMode; d_show_hours=true; d_show_tenths=false; d_step_enabled=StepDownEnabled|StepUpEnabled; @@ -37,6 +38,19 @@ RDTimeEdit::RDTimeEdit(QWidget *parent) } +RDTimeEdit::Mode RDTimeEdit::mode() const +{ + return d_mode; +} + + +void RDTimeEdit::setMode(Mode mode) +{ + d_mode=mode; + SetFormat(); +} + + bool RDTimeEdit::showHours() const { return d_show_hours; @@ -73,6 +87,18 @@ bool RDTimeEdit::isReadOnly() const } +int RDTimeEdit::length() const +{ + return QTime(0,0,0).msecsTo(time()); +} + + +void RDTimeEdit::setLength(int msec) +{ + setTime(QTime(0,0,0).addMSecs(100*(msec/100))); +} + + void RDTimeEdit::setReadOnly(bool state) { if(d_read_only!=state) { @@ -206,48 +232,60 @@ QAbstractSpinBox::StepEnabled RDTimeEdit::stepEnabled() const void RDTimeEdit::SetFormat() { - if(rda->system()->showTwelveHourTime()) { - if(d_show_tenths) { - if(d_show_hours) { - setDisplayFormat(RD_TWELVE_HOUR_TENTHS_FORMAT); - d_width_variance=1; + if(d_mode==RDTimeEdit::TimeMode) { + if(rda->system()->showTwelveHourTime()) { + if(d_show_tenths) { + if(d_show_hours) { + setDisplayFormat(RD_TWELVE_HOUR_TENTHS_FORMAT); + d_width_variance=1; + } + else { + setDisplayFormat(RD_OFFSET_TENTHS_FORMAT); + d_width_variance=0; + } } else { - setDisplayFormat(RD_OFFSET_TENTHS_FORMAT); - d_width_variance=0; + if(d_show_hours) { + setDisplayFormat(RD_TWELVE_HOUR_FORMAT); + d_width_variance=0; + } + else { + setDisplayFormat(RD_OFFSET_FORMAT); + d_width_variance=0; + } } } else { - if(d_show_hours) { - setDisplayFormat(RD_TWELVE_HOUR_FORMAT); - d_width_variance=0; + if(d_show_tenths) { + if(d_show_hours) { + setDisplayFormat(RD_TWENTYFOUR_HOUR_TENTHS_FORMAT); + d_width_variance=0; + } + else { + setDisplayFormat(RD_OFFSET_TENTHS_FORMAT); + d_width_variance=0; + } } else { - setDisplayFormat(RD_OFFSET_FORMAT); - d_width_variance=0; + if(d_show_hours) { + setDisplayFormat(RD_TWENTYFOUR_HOUR_FORMAT); + d_width_variance=0; + } + else { + setDisplayFormat(RD_OFFSET_FORMAT); + d_width_variance=0; + } } } } - else { + if(d_mode==RDTimeEdit::LengthMode) { if(d_show_tenths) { - if(d_show_hours) { - setDisplayFormat(RD_TWENTYFOUR_HOUR_TENTHS_FORMAT); - d_width_variance=0; - } - else { - setDisplayFormat(RD_OFFSET_TENTHS_FORMAT); - d_width_variance=0; - } + setDisplayFormat(RD_OFFSET_TENTHS_FORMAT); + d_width_variance=0; } else { - if(d_show_hours) { - setDisplayFormat(RD_TWENTYFOUR_HOUR_FORMAT); - d_width_variance=0; - } - else { - setDisplayFormat(RD_OFFSET_FORMAT); - d_width_variance=0; - } + setDisplayFormat(RD_OFFSET_FORMAT); + d_width_variance=0; } } } diff --git a/lib/rdtimeedit.h b/lib/rdtimeedit.h index 88bc673c..98622579 100644 --- a/lib/rdtimeedit.h +++ b/lib/rdtimeedit.h @@ -2,7 +2,7 @@ // // A QTimeEdit with tenth-second precision. // -// (C) Copyright 2003-2021 Fred Gleason +// (C) Copyright 2003-2024 Fred Gleason // // 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 @@ -28,15 +28,20 @@ class RDTimeEdit : public QTimeEdit { Q_OBJECT public: + enum Mode {TimeMode=0,LengthMode=1}; RDTimeEdit(QWidget *parent=0); + Mode mode() const; + void setMode(Mode mode); bool showHours() const; void setShowHours(bool state); bool showTenths() const; void setShowTenths(bool state); bool isReadOnly() const; + int length() const; public slots: - void setReadOnly(bool state); + void setLength(int msec); + void setReadOnly(bool state); protected: QValidator::State validate(QString &input,int &pos) const; @@ -51,6 +56,7 @@ class RDTimeEdit : public QTimeEdit int d_width_variance; QAbstractSpinBox::StepEnabled d_step_enabled; bool d_read_only; + Mode d_mode; }; diff --git a/rdairplay/edit_event.cpp b/rdairplay/edit_event.cpp index 78f82381..b3c39e3c 100644 --- a/rdairplay/edit_event.cpp +++ b/rdairplay/edit_event.cpp @@ -191,6 +191,7 @@ int EditEvent::exec(int line) edit_grace_bgroup->button(2)->setChecked(true); graceClickedData(2); edit_grace_edit->setTime(QTime(0,0,0).addMSecs(edit_logline->graceTime())); + edit_grace_edit->setLength(edit_logline->graceTime()); break; } edit_transtype_box->setCurrentIndex((int)edit_logline->transType()); @@ -389,8 +390,7 @@ void EditEvent::okData() break; case 2: - edit_logline-> - setGraceTime(QTime(0,0,0).msecsTo(edit_grace_edit->time())); + edit_logline->setGraceTime(edit_grace_edit->length()); break; } } diff --git a/rdlibrary/edit_cart.cpp b/rdlibrary/edit_cart.cpp index ea502ee2..41a614c7 100644 --- a/rdlibrary/edit_cart.cpp +++ b/rdlibrary/edit_cart.cpp @@ -2,7 +2,7 @@ // // Edit a Rivendell Cart // -// (C) Copyright 2002-2022 Fred Gleason +// (C) Copyright 2002-2024 Fred Gleason // // 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 @@ -181,8 +181,9 @@ EditCart::EditCart(const QList &cartnums,QString *path,bool new_cart, // Cart Forced Length // rdcart_controls.forced_length_edit=new RDTimeEdit(this); - rdcart_controls.forced_length_edit->setGeometry(530,36,85,21); rdcart_controls.forced_length_edit->setShowTenths(true); + rdcart_controls.forced_length_edit->setMode(RDTimeEdit::LengthMode); + rdcart_controls.forced_length_edit->setGeometry(530,36,85,21); rdcart_forced_length_ledit=new QLineEdit(this); rdcart_forced_length_ledit->setGeometry(535,36,80,21); rdcart_forced_length_ledit->hide(); @@ -581,8 +582,7 @@ EditCart::EditCart(const QList &cartnums,QString *path,bool new_cart, rdcart_average_length_edit-> setText(RDGetTimeLength(rdcart_cart->averageLength())); } - rdcart_controls.forced_length_edit-> - setTime(QTime(0,0,0).addMSecs(rdcart_cart->forcedLength())); + rdcart_controls.forced_length_edit->setLength(rdcart_cart->forcedLength()); rdcart_forced_length_ledit-> setText(rdcart_controls.forced_length_edit->time().toString("hh:mm:ss")); rdcart_controls.title_edit->setText(rdcart_cart->title()); @@ -792,13 +792,12 @@ void EditCart::okData() rdcart_cart->calculateAverageLength(&rdcart_length_deviation); rdcart_cart->setLengthDeviation(rdcart_length_deviation); rdcart_cart->updateLength(rdcart_controls.enforce_length_box->isChecked(), - QTime(0,0,0).msecsTo(rdcart_controls. - forced_length_edit->time())); + rdcart_controls.forced_length_edit->length()); rdcart_cart-> setAverageLength(RDSetTimeLength(rdcart_average_length_edit->text())); if(rdcart_controls.enforce_length_box->isChecked()) { rdcart_cart-> - setForcedLength(QTime(0,0,0).msecsTo(rdcart_controls.forced_length_edit->time())); + setForcedLength(rdcart_controls.forced_length_edit->length()); rdcart_cart->setEnforceLength(true); } else { @@ -825,8 +824,6 @@ void EditCart::okData() rdcart_cart->setConductor(rdcart_controls.conductor_edit->text()); rdcart_cart->setComposer(rdcart_controls.composer_edit->text()); rdcart_cart->setUserDefined(rdcart_controls.user_defined_edit->text()); - // rdcart_cart-> - // setUsageCode((RDCart::UsageCode)rdcart_usage_box->currentIndex()); rdcart_cart-> setUsageCode((RDCart::UsageCode)rdcart_usage_box-> itemData(rdcart_usage_box->currentIndex()).toInt()); @@ -910,8 +907,7 @@ void EditCart::cancelData() rdcart_cart->setForcedLength(len); } rdcart_cart->updateLength(rdcart_controls.enforce_length_box->isChecked(), - QTime(0,0,0).msecsTo(rdcart_controls. - forced_length_edit->time())); + rdcart_controls.forced_length_edit->length()); } done(false); } @@ -923,8 +919,7 @@ void EditCart::forcedLengthData(bool state) rdcart_controls.forced_length_edit->setEnabled(state); if(state) { rdcart_controls.forced_length_edit-> - setTime(QTime(0,0,0). - addMSecs(RDSetTimeLength(rdcart_average_length_edit->text()))); + setLength(RDSetTimeLength(rdcart_average_length_edit->text())); } } @@ -958,8 +953,8 @@ void EditCart::closeEvent(QCloseEvent *e) bool EditCart::ValidateLengths() { - return rdcart_cart->validateLengths(QTime(0,0,0). - msecsTo(rdcart_controls.forced_length_edit->time())); + return rdcart_cart-> + validateLengths(rdcart_controls.forced_length_edit->length()); }