2024-05-07 Fred Gleason <fredg@paravelsystems.com>

* Fixed a regression in the 'Edit Audio' dialog that caused it to
	ignore the state of the 'Edit Audio' user privilege.

Signed-off-by: Fred Gleason <fredg@paravelsystems.com>
This commit is contained in:
Fred Gleason 2024-05-07 12:55:11 -04:00
parent facf58f425
commit 1519123f68
10 changed files with 168 additions and 82 deletions

View File

@ -24753,3 +24753,6 @@
Ubuntu 22.04 LTS and Ubuntu 24.04 LTS in 'INSTALL'.
2024-05-06 Fred Gleason <fredg@paravelsystems.com>
* Added 'docs/misc/rivendell_release_checklist.txt'.
2024-05-07 Fred Gleason <fredg@paravelsystems.com>
* Fixed a regression in the 'Edit Audio' dialog that caused it to
ignore the state of the 'Edit Audio' user privilege.

View File

@ -142,7 +142,7 @@ QSize RDMarkerDialog::sizeHint() const
}
int RDMarkerDialog::exec(unsigned cartnum,int cutnum)
int RDMarkerDialog::exec(unsigned cartnum,int cutnum,bool read_only)
{
QString err_msg;
@ -160,12 +160,15 @@ int RDMarkerDialog::exec(unsigned cartnum,int cutnum)
tr("Unable to open cut in audio player!"));
return false;
}
d_player->setReadOnly(read_only);
d_marker_view->setReadOnly(read_only);
d_marker_view->
setSelectedMarkers(RDMarkerHandle::CutStart,RDMarkerHandle::CutEnd);
d_time_fullin_button->setEnabled(d_marker_view->canShrinkTime());
d_time_in_button->setEnabled(d_marker_view->canShrinkTime());
d_time_out_button->setEnabled(d_marker_view->canGrowTime());
d_time_fullout_button->setEnabled(d_marker_view->canGrowTime());
d_ok_button->setDisabled(read_only);
return QDialog::exec();
}

View File

@ -48,7 +48,7 @@ class RDMarkerDialog : public RDDialog
QSize sizeHint() const;
public slots:
int exec(unsigned cartnum,int cutnum);
int exec(unsigned cartnum,int cutnum,bool read_only);
private slots:
void amplitudeUpData();

View File

@ -30,6 +30,7 @@ RDMarkerPlayer::RDMarkerPlayer(int card,int port,QWidget *parent)
d_cae_serial=0;
d_is_playing=false;
d_looping=false;
d_read_only=false;
//
// CAE
@ -228,6 +229,23 @@ QSizePolicy RDMarkerPlayer::sizePolicy() const
}
bool RDMarkerPlayer::isReadOnly() const
{
return d_read_only;
}
void RDMarkerPlayer::setReadOnly(bool state)
{
if(state!=d_read_only) {
d_no_segue_fade_check->setDisabled(state);
d_play_gain_spin->setDisabled(state);
d_read_only=state;
trimThresholdChanged(d_play_gain_spin->value());
}
}
bool RDMarkerPlayer::setCut(unsigned cartnum,int cutnum)
{
clearCut();
@ -568,8 +586,8 @@ void RDMarkerPlayer::caePositionData(unsigned serial,unsigned msec)
void RDMarkerPlayer::trimThresholdChanged(int dbfs)
{
d_trim_start_button->setDisabled(dbfs==0);
d_trim_end_button->setDisabled(dbfs==0);
d_trim_start_button->setDisabled((dbfs==0)||d_read_only);
d_trim_end_button->setDisabled((dbfs==0)||d_read_only);
}

View File

@ -43,6 +43,8 @@ class RDMarkerPlayer : public RDWidget
~RDMarkerPlayer();
QSize sizeHint() const;
QSizePolicy sizePolicy() const;
bool isReadOnly() const;
void setReadOnly(bool state);
bool setCut(unsigned cartnum,int cutnum);
void clearCut();
int cursorPosition() const;
@ -131,6 +133,7 @@ class RDMarkerPlayer : public RDWidget
int d_loop_start_msec;
int d_loop_start_length;
int d_cursor_position;
bool d_read_only;
};

View File

@ -90,6 +90,18 @@ void RDMarkerHandle::setMaximum(int pos,int ptr)
}
bool RDMarkerHandle::isReadOnly() const
{
return d_read_only;
}
void RDMarkerHandle::setReadOnly(bool state)
{
d_read_only=state;
}
bool RDMarkerHandle::isSelected() const
{
return d_is_selected;
@ -112,9 +124,10 @@ void RDMarkerHandle::setSelected(bool state)
void RDMarkerHandle::hoverEnterEvent(QGraphicsSceneHoverEvent *e)
{
RDMarkerView *view=static_cast<RDMarkerView *>(d_marker_view);
view->setCursor(Qt::PointingHandCursor);
if(!d_read_only) {
RDMarkerView *view=static_cast<RDMarkerView *>(d_marker_view);
view->setCursor(Qt::PointingHandCursor);
}
}
@ -130,70 +143,80 @@ void RDMarkerHandle::mousePressEvent(QGraphicsSceneMouseEvent *e)
{
RDMarkerView *view=static_cast<RDMarkerView *>(d_marker_view);
if(e->button()==Qt::LeftButton) {
e->accept();
d_x_diff=pos().x()-e->scenePos().x();
if(d_peers.size()==0) {
QGraphicsScene *s=scene();
QList<QGraphicsItem *> items=s->items();
for(int i=0;i<items.size();i++) {
if(items.at(i)->toolTip()==toolTip()) {
d_peers.push_back(items.at(i));
if(d_read_only) {
e->ignore();
if(e->button()==Qt::RightButton) {
view->processRightClick(d_role,e->screenPos());
}
}
else {
if(e->button()==Qt::LeftButton) {
e->accept();
d_x_diff=pos().x()-e->scenePos().x();
if(d_peers.size()==0) {
QGraphicsScene *s=scene();
QList<QGraphicsItem *> items=s->items();
for(int i=0;i<items.size();i++) {
if(items.at(i)->toolTip()==toolTip()) {
d_peers.push_back(items.at(i));
}
}
}
view->setSelectedMarkers(d_role,RDMarkerHandle::LastRole);
}
view->setSelectedMarkers(d_role,RDMarkerHandle::LastRole);
}
if(e->button()==Qt::RightButton) {
e->ignore();
view->processRightClick(d_role,e->screenPos());
if(e->button()==Qt::RightButton) {
e->ignore();
view->processRightClick(d_role,e->screenPos());
}
}
}
void RDMarkerHandle::mouseMoveEvent(QGraphicsSceneMouseEvent *e)
{
RDMarkerView *view=static_cast<RDMarkerView *>(d_marker_view);
if(!d_read_only) {
RDMarkerView *view=static_cast<RDMarkerView *>(d_marker_view);
//
// Check Limit Stops
//
int limit_ptr=-1;
int x=e->scenePos().x()+d_x_diff-LEFT_MARGIN;
//
// Check Limit Stops
//
int limit_ptr=-1;
int x=e->scenePos().x()+d_x_diff-LEFT_MARGIN;
if((d_minimum_pos>=0)&&(x<d_minimum_pos)) {
d_x_diff=d_minimum_pos-e->scenePos().x()+LEFT_MARGIN;
x=d_minimum_pos;
limit_ptr=d_minimum_ptr;
}
else {
if((d_maximum_pos>=0)&&(x>d_maximum_pos)) {
d_x_diff=d_maximum_pos-e->scenePos().x()+LEFT_MARGIN;
x=d_maximum_pos;
limit_ptr=d_maximum_ptr;
if((d_minimum_pos>=0)&&(x<d_minimum_pos)) {
d_x_diff=d_minimum_pos-e->scenePos().x()+LEFT_MARGIN;
x=d_minimum_pos;
limit_ptr=d_minimum_ptr;
}
else {
if((d_maximum_pos>=0)&&(x>d_maximum_pos)) {
d_x_diff=d_maximum_pos-e->scenePos().x()+LEFT_MARGIN;
x=d_maximum_pos;
limit_ptr=d_maximum_ptr;
}
}
}
//
// Update Marker Graphic
//
for(int i=0;i<d_peers.size();i++) {
QGraphicsItem *peer=d_peers.at(i);
peer->setPos(e->scenePos().x()+d_x_diff,peer->pos().y());
}
//
// Update Marker Graphic
//
for(int i=0;i<d_peers.size();i++) {
QGraphicsItem *peer=d_peers.at(i);
peer->setPos(e->scenePos().x()+d_x_diff,peer->pos().y());
}
if(limit_ptr<0) { // Generate new pointer value
int64_t pframes=(int64_t)(1152*x*view->shrinkFactor());
view->updatePosition(d_role,(int)((int64_t)1000*pframes/
(int64_t)view->sampleRate()));
}
//
// We're against a limit stop, so use the pointer value of the stop
// rather than generating a new one as not to risk losing precision.
//
else {
view->updatePosition(d_role,limit_ptr);
if(limit_ptr<0) { // Generate new pointer value
int64_t pframes=(int64_t)(1152*x*view->shrinkFactor());
view->updatePosition(d_role,(int)((int64_t)1000*pframes/
(int64_t)view->sampleRate()));
}
//
// We're against a limit stop, so use the pointer value of the stop
// rather than generating a new one as not to risk losing precision.
//
else {
view->updatePosition(d_role,limit_ptr);
}
}
}
@ -362,6 +385,7 @@ RDMarkerHandle::PointerType RDMarkerHandle::pointerType(RDMarkerHandle::PointerR
RDMarkerView::RDMarkerView(int width,int height,QWidget *parent)
: RDWidget(parent)
{
d_read_only=false;
d_width=width;
d_height=height;
d_scene=NULL;
@ -435,6 +459,27 @@ QSizePolicy RDMarkerView::sizePolicy() const
}
bool RDMarkerView::isReadOnly() const
{
return d_read_only;
}
void RDMarkerView::setReadOnly(bool state)
{
if(state!=d_read_only) {
for(int i=0;i<RDMarkerHandle::LastRole;i++) {
for(int j=0;j<2;j++) {
if(d_handles[i][j]!=NULL) {
d_handles[i][j]->setReadOnly(state);
}
}
}
d_read_only=state;
}
}
int RDMarkerView::audioGain() const
{
return d_audio_gain;
@ -498,18 +543,20 @@ bool RDMarkerView::hasUnsavedChanges() const
void RDMarkerView::processRightClick(RDMarkerHandle::PointerRole role,
const QPointF &pos)
{
d_deleting_roles.clear();
if(!d_read_only) {
d_deleting_roles.clear();
d_deleting_roles.push_back(role);
if((role==RDMarkerHandle::SegueStart)||
(role==RDMarkerHandle::TalkStart)||
(role==RDMarkerHandle::HookStart)) {
d_deleting_roles.push_back((RDMarkerHandle::PointerRole)(role+1));
}
if((role==RDMarkerHandle::SegueEnd)||
(role==RDMarkerHandle::TalkEnd)||
(role==RDMarkerHandle::HookEnd)) {
d_deleting_roles.push_back((RDMarkerHandle::PointerRole)(role-1));
d_deleting_roles.push_back(role);
if((role==RDMarkerHandle::SegueStart)||
(role==RDMarkerHandle::TalkStart)||
(role==RDMarkerHandle::HookStart)) {
d_deleting_roles.push_back((RDMarkerHandle::PointerRole)(role+1));
}
if((role==RDMarkerHandle::SegueEnd)||
(role==RDMarkerHandle::TalkEnd)||
(role==RDMarkerHandle::HookEnd)) {
d_deleting_roles.push_back((RDMarkerHandle::PointerRole)(role-1));
}
}
d_marker_menu_used=true;
d_main_menu->setGeometry(pos.x(),pos.y(),
@ -831,14 +878,14 @@ void RDMarkerView::clear()
void RDMarkerView::updateMenuData()
{
bool can_add=
(d_deleting_roles.size()==0)&&
(d_msec_pos>=d_pointers[RDMarkerHandle::CutStart])&&
(d_msec_pos<d_pointers[RDMarkerHandle::CutEnd]);
bool can_delete=
d_marker_menu_used&&
(!d_deleting_roles.contains(RDMarkerHandle::CutStart))&&
(!d_deleting_roles.contains(RDMarkerHandle::CutEnd));
bool can_add=(!d_read_only)&&
((d_deleting_roles.size()==0)&&
(d_msec_pos>=d_pointers[RDMarkerHandle::CutStart])&&
(d_msec_pos<d_pointers[RDMarkerHandle::CutEnd]));
bool can_delete=(!d_read_only)&&
(d_marker_menu_used&&
(!d_deleting_roles.contains(RDMarkerHandle::CutStart))&&
(!d_deleting_roles.contains(RDMarkerHandle::CutEnd)));
d_delete_marker_action->setEnabled(can_delete);
d_add_fadedown_action->
@ -1111,7 +1158,7 @@ void RDMarkerView::mousePressEvent(QMouseEvent *e)
return;
}
d_mouse_pos=e->x()-LEFT_MARGIN;
if(d_marker_menu_used) {
d_marker_menu_used=false;
return;
@ -1129,10 +1176,10 @@ void RDMarkerView::mousePressEvent(QMouseEvent *e)
case Qt::RightButton:
d_deleting_roles.clear();
d_main_menu->setGeometry(e->globalX(),e->globalY(),
d_main_menu->sizeHint().width(),
d_main_menu->sizeHint().height());
d_main_menu->sizeHint().width(),
d_main_menu->sizeHint().height());
d_main_menu->exec();
break;
@ -1313,6 +1360,7 @@ void RDMarkerView::DrawMarker(RDMarkerHandle::PointerType type,
l_item->setPos(LEFT_MARGIN+Frame(d_pointers[role]),0);
m_item=new RDMarkerHandle(role,type,this);
m_item->setReadOnly(d_read_only);
d_scene->addItem(m_item);
m_item->setPos(LEFT_MARGIN+Frame(d_pointers[role]),handle_pos-12);
d_handles[role][0]=m_item;
@ -1320,6 +1368,7 @@ void RDMarkerView::DrawMarker(RDMarkerHandle::PointerType type,
setSelected((d_selected_markers[0]==role)||(d_selected_markers[1]==role));
m_item=new RDMarkerHandle(role,type,this);
m_item->setReadOnly(d_read_only);
d_scene->addItem(m_item);
m_item->setPos(LEFT_MARGIN+Frame(d_pointers[role]),d_height-handle_pos-8);
d_handles[role][1]=m_item;

View File

@ -50,6 +50,8 @@ class RDMarkerHandle : public QGraphicsPolygonItem
PointerRole role() const;
void setMinimum(int pos,int ptr);
void setMaximum(int pos,int ptr);
bool isReadOnly() const;
void setReadOnly(bool state);
bool isSelected() const;
void setSelected(bool state);
static QString pointerRoleText(PointerRole role);
@ -66,6 +68,7 @@ class RDMarkerHandle : public QGraphicsPolygonItem
private:
QString d_name;
PointerRole d_role;
bool d_read_only;
bool d_is_selected;
QList<QGraphicsItem *> d_peers;
void *d_marker_view;
@ -87,6 +90,8 @@ class RDMarkerView : public RDWidget
~RDMarkerView();
QSize sizeHint() const;
QSizePolicy sizePolicy() const;
bool isReadOnly() const;
void setReadOnly( bool state);
int audioGain() const;
unsigned sampleRate() const;
int shrinkFactor() const;
@ -160,6 +165,7 @@ class RDMarkerView : public RDWidget
void SetReferenceLines();
QGraphicsView *d_view;
QGraphicsScene *d_scene;
bool d_read_only;
unsigned d_cart_number;
int d_cut_number;
int d_width;

View File

@ -1104,7 +1104,8 @@ void RDTrackerWidget::editAudioData()
if(d_marker_dialog->
exec(RDCut::cartNumber(d_loglines[d_rightclick_track]->cutName()),
RDCut::cutNumber(d_loglines[d_rightclick_track]->cutName()))) {
RDCut::cutNumber(d_loglines[d_rightclick_track]->cutName()),
!rda->user()->editAudio())) {
rdcart->updateLength();
d_loglines[d_rightclick_track]->refreshPointers();
if(d_loglines[d_rightclick_track]->fadeupPoint()<

View File

@ -74,7 +74,8 @@ void CatchTableView::editAudioMenuData()
RDCart *rdcart=new RDCart(RDCut::cartNumber(cutname));
if(d_marker_dialog->
exec(RDCut::cartNumber(cutname),RDCut::cutNumber(cutname))) {
exec(RDCut::cartNumber(cutname),RDCut::cutNumber(cutname),
!rda->user()->editAudio())) {
rdcart->updateLength();
mod->refresh(mod->index(d_mouse_row,0));
SendNotification(RDNotification::ModifyAction,

View File

@ -400,7 +400,9 @@ void AudioCart::editCutData()
tr("No audio is present in the cut!"));
return;
}
if(rdcart_marker_dialog->exec(RDCut::cartNumber(cutname),RDCut::cutNumber(cutname))) {
if(rdcart_marker_dialog->
exec(RDCut::cartNumber(cutname),RDCut::cutNumber(cutname),
!rda->user()->editAudio())) {
emit cartDataChanged();
rdcart_cart->updateLength(rdcart_controls->enforce_length_box->isChecked(),
QTime(0,0,0).msecsTo(rdcart_controls->