mirror of
https://github.com/ElvishArtisan/rivendell.git
synced 2025-09-16 16:30:26 +02:00
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:
parent
facf58f425
commit
1519123f68
@ -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.
|
||||
|
@ -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();
|
||||
}
|
||||
|
@ -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();
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
||||
|
@ -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;
|
||||
};
|
||||
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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()<
|
||||
|
@ -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,
|
||||
|
@ -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->
|
||||
|
Loading…
x
Reference in New Issue
Block a user