From 346fe9ec1efc5200466e01d2d5e4b9b1c0847242 Mon Sep 17 00:00:00 2001 From: Fred Gleason Date: Sat, 20 Mar 2021 19:00:55 -0400 Subject: [PATCH] 2021-03-20 Fred Gleason * Refactored the 'RDMarkerDialog' dialog to select markers by pairs rather than singly. Signed-off-by: Fred Gleason --- ChangeLog | 3 + lib/rdmarkerdialog.cpp | 51 ++++++----- lib/rdmarkerplayer.cpp | 190 +++++++++++++++++++++------------------- lib/rdmarkerplayer.h | 27 +++--- lib/rdmarkerreadout.cpp | 38 ++------ lib/rdmarkerreadout.h | 3 +- lib/rdmarkerview.cpp | 71 ++++++++++++--- lib/rdmarkerview.h | 8 +- 8 files changed, 217 insertions(+), 174 deletions(-) diff --git a/ChangeLog b/ChangeLog index f1f96623..3493abbe 100644 --- a/ChangeLog +++ b/ChangeLog @@ -21301,3 +21301,6 @@ * Added mouse wheel support to 'RDMarkerView'. * Added support for play cursor positioning by mouse to 'RDMarkerView'. +2021-03-20 Fred Gleason + * Refactored the 'RDMarkerDialog' dialog to select markers by pairs + rather than singly. diff --git a/lib/rdmarkerdialog.cpp b/lib/rdmarkerdialog.cpp index 7699dc4f..e17f719b 100644 --- a/lib/rdmarkerdialog.cpp +++ b/lib/rdmarkerdialog.cpp @@ -82,8 +82,10 @@ RDMarkerDialog::RDMarkerDialog(const QString &caption,int card,int port, SIGNAL(pointerValueChanged(RDMarkerHandle::PointerRole,int)), d_player,SLOT(setPointerValue(RDMarkerHandle::PointerRole,int))); connect(d_marker_view, - SIGNAL(selectedMarkerChanged(RDMarkerHandle::PointerRole)), - d_player,SLOT(setSelectedMarker(RDMarkerHandle::PointerRole))); + SIGNAL(selectedMarkersChanged(RDMarkerHandle::PointerRole, + RDMarkerHandle::PointerRole)), + d_player,SLOT(setSelectedMarkers(RDMarkerHandle::PointerRole, + RDMarkerHandle::PointerRole))); connect(d_marker_view,SIGNAL(positionClicked(int)), d_player,SLOT(setPlayPosition(int))); @@ -95,8 +97,10 @@ RDMarkerDialog::RDMarkerDialog(const QString &caption,int card,int port, SIGNAL(pointerValueChanged(RDMarkerHandle::PointerRole,int)), d_cut_readout,SLOT(setValue(RDMarkerHandle::PointerRole,int))); connect(d_marker_view, - SIGNAL(selectedMarkerChanged(RDMarkerHandle::PointerRole)), - d_cut_readout,SLOT(setSelectedMarker(RDMarkerHandle::PointerRole))); + SIGNAL(selectedMarkersChanged(RDMarkerHandle::PointerRole, + RDMarkerHandle::PointerRole)), + d_cut_readout,SLOT(setSelectedMarkers(RDMarkerHandle::PointerRole, + RDMarkerHandle::PointerRole))); d_cut_readout->setEnabled(true); d_talk_readout=new RDMarkerReadout(RDMarkerHandle::TalkStart,this); @@ -104,42 +108,52 @@ RDMarkerDialog::RDMarkerDialog(const QString &caption,int card,int port, SIGNAL(pointerValueChanged(RDMarkerHandle::PointerRole,int)), d_talk_readout,SLOT(setValue(RDMarkerHandle::PointerRole,int))); connect(d_marker_view, - SIGNAL(selectedMarkerChanged(RDMarkerHandle::PointerRole)), - d_talk_readout,SLOT(setSelectedMarker(RDMarkerHandle::PointerRole))); + SIGNAL(selectedMarkersChanged(RDMarkerHandle::PointerRole, + RDMarkerHandle::PointerRole)), + d_talk_readout,SLOT(setSelectedMarkers(RDMarkerHandle::PointerRole, + RDMarkerHandle::PointerRole))); d_segue_readout=new RDMarkerReadout(RDMarkerHandle::SegueStart,this); connect(d_marker_view, SIGNAL(pointerValueChanged(RDMarkerHandle::PointerRole,int)), d_segue_readout,SLOT(setValue(RDMarkerHandle::PointerRole,int))); connect(d_marker_view, - SIGNAL(selectedMarkerChanged(RDMarkerHandle::PointerRole)), - d_segue_readout,SLOT(setSelectedMarker(RDMarkerHandle::PointerRole))); + SIGNAL(selectedMarkersChanged(RDMarkerHandle::PointerRole, + RDMarkerHandle::PointerRole)), + d_segue_readout,SLOT(setSelectedMarkers(RDMarkerHandle::PointerRole, + RDMarkerHandle::PointerRole))); d_hook_readout=new RDMarkerReadout(RDMarkerHandle::HookStart,this); connect(d_marker_view, SIGNAL(pointerValueChanged(RDMarkerHandle::PointerRole,int)), d_hook_readout,SLOT(setValue(RDMarkerHandle::PointerRole,int))); connect(d_marker_view, - SIGNAL(selectedMarkerChanged(RDMarkerHandle::PointerRole)), - d_hook_readout,SLOT(setSelectedMarker(RDMarkerHandle::PointerRole))); + SIGNAL(selectedMarkersChanged(RDMarkerHandle::PointerRole, + RDMarkerHandle::PointerRole)), + d_hook_readout,SLOT(setSelectedMarkers(RDMarkerHandle::PointerRole, + RDMarkerHandle::PointerRole))); d_fadeup_readout=new RDMarkerReadout(RDMarkerHandle::FadeUp,this); connect(d_marker_view, SIGNAL(pointerValueChanged(RDMarkerHandle::PointerRole,int)), d_fadeup_readout,SLOT(setValue(RDMarkerHandle::PointerRole,int))); connect(d_marker_view, - SIGNAL(selectedMarkerChanged(RDMarkerHandle::PointerRole)), + SIGNAL(selectedMarkersChanged(RDMarkerHandle::PointerRole, + RDMarkerHandle::PointerRole)), d_fadeup_readout, - SLOT(setSelectedMarker(RDMarkerHandle::PointerRole))); + SLOT(setSelectedMarkers(RDMarkerHandle::PointerRole, + RDMarkerHandle::PointerRole))); d_fadedown_readout=new RDMarkerReadout(RDMarkerHandle::FadeDown,this); connect(d_marker_view, SIGNAL(pointerValueChanged(RDMarkerHandle::PointerRole,int)), d_fadedown_readout,SLOT(setValue(RDMarkerHandle::PointerRole,int))); connect(d_marker_view, - SIGNAL(selectedMarkerChanged(RDMarkerHandle::PointerRole)), + SIGNAL(selectedMarkersChanged(RDMarkerHandle::PointerRole, + RDMarkerHandle::PointerRole)), d_fadedown_readout, - SLOT(setSelectedMarker(RDMarkerHandle::PointerRole))); + SLOT(setSelectedMarkers(RDMarkerHandle::PointerRole, + RDMarkerHandle::PointerRole))); /************************************************************************** * Navigation Section @@ -194,19 +208,14 @@ int RDMarkerDialog::exec(unsigned cartnum,int cutnum) for(int i=0;isetValue(role,d_marker_view->pointerValue(role)); - d_cut_readout->setSelectedMarker(RDMarkerHandle::LastRole); d_talk_readout->setValue(role,d_marker_view->pointerValue(role)); - d_talk_readout->setSelectedMarker(RDMarkerHandle::LastRole); d_segue_readout->setValue(role,d_marker_view->pointerValue(role)); - d_segue_readout->setSelectedMarker(RDMarkerHandle::LastRole); d_hook_readout->setValue(role,d_marker_view->pointerValue(role)); - d_hook_readout->setSelectedMarker(RDMarkerHandle::LastRole); d_fadeup_readout->setValue(role,d_marker_view->pointerValue(role)); - d_fadeup_readout->setSelectedMarker(RDMarkerHandle::LastRole); d_fadedown_readout->setValue(role,d_marker_view->pointerValue(role)); - d_fadedown_readout->setSelectedMarker(RDMarkerHandle::LastRole); d_player->setPointerValue(role,d_marker_view->pointerValue(role)); - d_player->setSelectedMarker(RDMarkerHandle::LastRole); + d_player-> + setSelectedMarkers(RDMarkerHandle::LastRole,RDMarkerHandle::LastRole); } d_marker_view->setSelectedMarker(RDMarkerHandle::CutStart); diff --git a/lib/rdmarkerplayer.cpp b/lib/rdmarkerplayer.cpp index f64086d9..eb191e0c 100644 --- a/lib/rdmarkerplayer.cpp +++ b/lib/rdmarkerplayer.cpp @@ -82,37 +82,36 @@ RDMarkerPlayer::RDMarkerPlayer(int card,int port,QWidget *parent) // // Transport Buttons // - d_play_cursor_button= - new RDTransportButton(RDTransportButton::PlayBetween,this); - d_play_cursor_button->setFocusPolicy(Qt::NoFocus); - d_play_cursor_button->setEnabled((d_cards.first()>=0)&&(d_port>=0)); - connect(d_play_cursor_button,SIGNAL(clicked()), - this,SLOT(playCursorData())); - - d_play_start_button= + d_play_button= new RDTransportButton(RDTransportButton::Play,this); - d_play_start_button->setFocusPolicy(Qt::NoFocus); - d_play_start_button->setEnabled((d_cards.first()>=0)&&(d_port>=0)); - connect(d_play_start_button,SIGNAL(clicked()), - this,SLOT(playStartData())); + d_play_button->setFocusPolicy(Qt::NoFocus); + d_play_button->setEnabled((d_cards.first()>=0)&&(d_port>=0)); + connect(d_play_button,SIGNAL(clicked()), + this,SLOT(buttonPlayData())); - d_pause_button=new RDTransportButton(RDTransportButton::Pause,this); - d_pause_button->setFocusPolicy(Qt::NoFocus); - d_pause_button->setOnColor(QColor(Qt::red)); - d_pause_button->setEnabled((d_cards.first()>=0)&&(d_port>=0)); - connect(d_pause_button,SIGNAL(clicked()),this,SLOT(pauseData())); + d_play_from_button= + new RDTransportButton(RDTransportButton::PlayFrom,this); + d_play_from_button->setFocusPolicy(Qt::NoFocus); + d_play_from_button->setEnabled((d_cards.first()>=0)&&(d_port>=0)); + connect(d_play_from_button,SIGNAL(clicked()), + this,SLOT(buttonPlayFromData())); + + d_play_to_button=new RDTransportButton(RDTransportButton::PlayTo,this); + d_play_to_button->setFocusPolicy(Qt::NoFocus); + d_play_to_button->setEnabled((d_cards.first()>=0)&&(d_port>=0)); + connect(d_play_to_button,SIGNAL(clicked()),this,SLOT(buttonPlayToData())); d_stop_button=new RDTransportButton(RDTransportButton::Stop,this); d_stop_button->setFocusPolicy(Qt::NoFocus); d_stop_button->on(); d_stop_button->setOnColor(QColor(Qt::red)); d_stop_button->setEnabled((d_cards.first()>=0)&&(d_port>=0)); - connect(d_stop_button,SIGNAL(clicked()),this,SLOT(stopData())); + connect(d_stop_button,SIGNAL(clicked()),this,SLOT(buttonStopData())); d_loop_button=new RDTransportButton(RDTransportButton::Loop,this); d_loop_button->off(); d_loop_button->setEnabled((d_cards.first()>=0)&&(d_port>=0)); - connect(d_loop_button,SIGNAL(clicked()),this,SLOT(loopData())); + connect(d_loop_button,SIGNAL(clicked()),this,SLOT(buttonLoopData())); // // The Audio Meter @@ -186,70 +185,36 @@ void RDMarkerPlayer::setPointerValue(RDMarkerHandle::PointerRole role,int ptr) } -void RDMarkerPlayer::setSelectedMarker(RDMarkerHandle::PointerRole role) +void RDMarkerPlayer::setSelectedMarkers(RDMarkerHandle::PointerRole start_role, + RDMarkerHandle::PointerRole end_role) { + QColor color=RDMarkerHandle::pointerRoleColor(start_role); + if(start_role==RDMarkerHandle::LastRole) { + color=RDMarkerHandle::pointerRoleColor(end_role); + } d_region_edit_label-> - setStyleSheet("background-color: "+ - RDMarkerHandle::pointerRoleColor(role).name()); - d_play_cursor_button-> - setAccentColor(RDMarkerHandle::pointerRoleColor(role)); - d_selected_marker=role; + setStyleSheet("background-color: "+color.name()); + d_play_from_button->setAccentColor(color); + d_play_to_button->setAccentColor(color); + d_selected_markers[0]=start_role; + d_selected_markers[1]=end_role; + + d_play_from_button->setDisabled(start_role==RDMarkerHandle::LastRole); + d_play_to_button->setDisabled(end_role==RDMarkerHandle::LastRole); UpdateReadouts(); } -void RDMarkerPlayer::playCursorData() +void RDMarkerPlayer::buttonPlayData() { - d_active_play_button=d_play_cursor_button; - - int start=0; - int len=0; - if(d_cae_handle>=0) { - if(d_is_playing) { - rda->cae()->stopPlay(d_cae_handle); - } - } - printf("selected: %u\n",d_selected_marker); - switch(RDMarkerHandle::pointerType(d_selected_marker)) { - case RDMarkerHandle::Start: - printf("START\n"); - start=d_pointers[d_selected_marker]; - len=d_pointers[d_selected_marker+1]-d_pointers[d_selected_marker]; - break; - - case RDMarkerHandle::End: - printf("END\n"); - start=d_pointers[d_selected_marker]-2000; - len=2000; - if(start<0) { - start=0; - len=d_pointers[d_selected_marker]; - } - break; - } - printf("start: %d len: %d\n",start,len); - rda->cae()->positionPlay(d_cae_handle,start); - rda->cae()->play(d_cae_handle,len,100000,false); - rda->cae()->setPlayPortActive(d_cards.first(),d_port,d_cae_stream); - // FIXME: Implement variable gain here! - rda->cae()->setOutputVolume(d_cards.first(),d_cae_stream,d_port,0); - // rda->cae()-> - // setOutputVolume(d_cards.first(),d_cae_stream,d_port,0+edit_gain_control->value()); - d_meter_timer->start(RD_METER_UPDATE_INTERVAL); -} - - -void RDMarkerPlayer::playStartData() -{ - d_active_play_button=d_play_start_button; + d_active_play_button=d_play_button; if(d_cae_handle>=0) { if(d_is_playing) { rda->cae()->stopPlay(d_cae_handle); } } - rda->cae()->positionPlay(d_cae_handle,d_pointers[RDMarkerHandle::CutStart]); rda->cae()->play(d_cae_handle, d_pointers[RDMarkerHandle::CutEnd]- d_pointers[RDMarkerHandle::CutStart],100000,false); @@ -262,12 +227,55 @@ void RDMarkerPlayer::playStartData() } -void RDMarkerPlayer::pauseData() +void RDMarkerPlayer::buttonPlayFromData() { + d_active_play_button=d_play_from_button; + if(d_cae_handle>=0) { + if(d_is_playing) { + rda->cae()->stopPlay(d_cae_handle); + } + } + if(d_selected_markers[RDMarkerHandle::Start]!=RDMarkerHandle::LastRole) { + rda->cae()->positionPlay(d_cae_handle,d_pointers[d_selected_markers[0]]); + rda->cae()->play(d_cae_handle,0,100000,false); + rda->cae()->setPlayPortActive(d_cards.first(),d_port,d_cae_stream); + // FIXME: Implement variable gain here! + rda->cae()->setOutputVolume(d_cards.first(),d_cae_stream,d_port,0); + // rda->cae()-> + // setOutputVolume(d_cards.first(),d_cae_stream,d_port,0+edit_gain_control->value()); + d_meter_timer->start(RD_METER_UPDATE_INTERVAL); + } } -void RDMarkerPlayer::stopData() +void RDMarkerPlayer::buttonPlayToData() +{ + d_active_play_button=d_play_to_button; + if(d_cae_handle>=0) { + if(d_is_playing) { + rda->cae()->stopPlay(d_cae_handle); + } + } + if(d_selected_markers[RDMarkerHandle::End]!=RDMarkerHandle::LastRole) { + int start=d_pointers[d_selected_markers[1]]-2000; + int len=2000; + if(start<0) { + start=0; + len=d_selected_markers[1]; + } + rda->cae()->positionPlay(d_cae_handle,start); + rda->cae()->play(d_cae_handle,len,100000,false); + rda->cae()->setPlayPortActive(d_cards.first(),d_port,d_cae_stream); + // FIXME: Implement variable gain here! + rda->cae()->setOutputVolume(d_cards.first(),d_cae_stream,d_port,0); + // rda->cae()-> + // setOutputVolume(d_cards.first(),d_cae_stream,d_port,0+edit_gain_control->value()); + d_meter_timer->start(RD_METER_UPDATE_INTERVAL); + } +} + + +void RDMarkerPlayer::buttonStopData() { if(d_cae_handle>=0) { if(d_is_playing) { @@ -277,7 +285,7 @@ void RDMarkerPlayer::stopData() } -void RDMarkerPlayer::loopData() +void RDMarkerPlayer::buttonLoopData() { } @@ -297,7 +305,6 @@ void RDMarkerPlayer::caePlayedData(int handle) if(handle==d_cae_handle) { if(!d_is_playing) { d_active_play_button->setState(RDTransportButton::On); - d_pause_button->setState(RDTransportButton::Off); d_stop_button->setState(RDTransportButton::Off); d_is_playing=true; } @@ -314,9 +321,9 @@ void RDMarkerPlayer::caePausedData(int handle) d_meter->setLeftPeakBar(-10000); d_meter->setRightPeakBar(-10000); } - d_play_cursor_button->setState(RDTransportButton::Off); - d_play_start_button->setState(RDTransportButton::Off); - d_pause_button->setState(RDTransportButton::Off); + d_play_from_button->setState(RDTransportButton::Off); + d_play_button->setState(RDTransportButton::Off); + d_play_to_button->setState(RDTransportButton::Off); d_stop_button->setState(RDTransportButton::On); d_is_playing=false; } @@ -342,9 +349,9 @@ void RDMarkerPlayer::resizeEvent(QResizeEvent *) d_length_label->setGeometry(246,3,70,16); d_length_edit->setGeometry(246,20,70,18); - d_play_cursor_button->setGeometry(10,42,65,45); - d_play_start_button->setGeometry(80,42,65,45); - d_pause_button->setGeometry(150,42,65,45); + d_play_button->setGeometry(10,42,65,45); + d_play_from_button->setGeometry(80,42,65,45); + d_play_to_button->setGeometry(150,42,65,45); d_stop_button->setGeometry(220,42,65,45); d_loop_button->setGeometry(290,42,65,45); @@ -374,38 +381,37 @@ void RDMarkerPlayer::UpdateReadouts() // // Region // - switch(d_selected_marker) { + switch(d_selected_markers[0]) { case RDMarkerHandle::CutStart: case RDMarkerHandle::TalkStart: case RDMarkerHandle::SegueStart: case RDMarkerHandle::HookStart: d_region_edit-> - setText(RDGetTimeLength(d_pointers[d_selected_marker+1]- - d_pointers[d_selected_marker],true,true)); + setText(RDGetTimeLength(d_pointers[d_selected_markers[1]]- + d_pointers[d_selected_markers[0]],true,true)); break; case RDMarkerHandle::CutEnd: case RDMarkerHandle::TalkEnd: case RDMarkerHandle::SegueEnd: case RDMarkerHandle::HookEnd: - d_region_edit-> - setText(RDGetTimeLength(d_pointers[d_selected_marker]- - d_pointers[d_selected_marker-1],true,true)); - break; - - case RDMarkerHandle::FadeUp: - d_region_edit-> - setText(RDGetTimeLength(d_pointers[d_selected_marker]- - d_pointers[RDMarkerHandle::CutStart],true,true)); break; case RDMarkerHandle::FadeDown: d_region_edit-> setText(RDGetTimeLength(d_pointers[RDMarkerHandle::CutEnd]- - d_pointers[d_selected_marker],true,true)); + d_pointers[d_selected_markers[0]],true,true)); break; case RDMarkerHandle::LastRole: + if(d_selected_markers[1]==RDMarkerHandle::FadeUp) { + d_region_edit-> + setText(RDGetTimeLength(d_pointers[d_selected_markers[1]]- + d_pointers[RDMarkerHandle::CutStart],true,true)); + } + break; + + case RDMarkerHandle::FadeUp: break; } diff --git a/lib/rdmarkerplayer.h b/lib/rdmarkerplayer.h index 808ece2d..eaf63d1b 100644 --- a/lib/rdmarkerplayer.h +++ b/lib/rdmarkerplayer.h @@ -46,17 +46,18 @@ class RDMarkerPlayer : public RDWidget public slots: void setPlayPosition(int msec); void setPointerValue(RDMarkerHandle::PointerRole role,int ptr); - void setSelectedMarker(RDMarkerHandle::PointerRole role); + void setSelectedMarkers(RDMarkerHandle::PointerRole start_role, + RDMarkerHandle::PointerRole end_role); signals: void cursorPositionChanged(unsigned msec); private slots: - void playCursorData(); - void playStartData(); - void pauseData(); - void stopData(); - void loopData(); + void buttonPlayData(); + void buttonPlayFromData(); + void buttonPlayToData(); + void buttonStopData(); + void buttonLoopData(); void meterData(); void caePlayedData(int handle); void caePausedData(int handle); @@ -69,18 +70,17 @@ class RDMarkerPlayer : public RDWidget private: void UpdateReadouts(); QLabel *d_position_label; - // QLineEdit *d_position_edit; QLabel *d_position_edit; QLabel *d_region_edit_label; - // QLineEdit *d_region_edit; QLabel *d_region_edit; QLabel *d_length_label; - // QLineEdit *d_length_edit; QLabel *d_length_edit; - RDTransportButton *d_play_cursor_button; - RDTransportButton *d_play_start_button; + + RDTransportButton *d_play_button; + RDTransportButton *d_play_from_button; + RDTransportButton *d_play_to_button; RDTransportButton *d_active_play_button; - RDTransportButton *d_pause_button; + RDTransportButton *d_stop_button; RDTransportButton *d_loop_button; RDStereoMeter *d_meter; @@ -90,8 +90,7 @@ class RDMarkerPlayer : public RDWidget int d_cae_stream; int d_cae_handle; bool d_is_playing; - RDMarkerHandle::PointerRole d_selected_marker; - + RDMarkerHandle::PointerRole d_selected_markers[2]; int d_pointers[RDMarkerHandle::LastRole]; }; diff --git a/lib/rdmarkerreadout.cpp b/lib/rdmarkerreadout.cpp index be1b02aa..89cd8a79 100644 --- a/lib/rdmarkerreadout.cpp +++ b/lib/rdmarkerreadout.cpp @@ -35,7 +35,6 @@ RDMarkerReadout::RDMarkerReadout(RDMarkerHandle::PointerRole role, d_label->setFont(labelFont()); d_label->setStyleSheet("background-color: "+ RDMarkerHandle::pointerRoleColor(role).name()); - // d_label->setDisabled(true); switch(role) { case RDMarkerHandle::CutStart: @@ -85,7 +84,6 @@ RDMarkerReadout::~RDMarkerReadout() QSize RDMarkerReadout::sizeHint() const { return QSize(labelFontMetrics()->width("00:00:00")+10,20+20*d_edits.size()); - // return QSize(60,20+20*d_edits.size()); } @@ -111,38 +109,18 @@ void RDMarkerReadout::setValue(RDMarkerHandle::PointerRole role,int value) } -void RDMarkerReadout::setSelectedMarker(RDMarkerHandle::PointerRole role) +void RDMarkerReadout::setSelectedMarkers(RDMarkerHandle::PointerRole start_role, + RDMarkerHandle::PointerRole end_role) { - if(d_selected_marker!=role) { + if(d_roles.contains(start_role)||d_roles.contains(end_role)) { + for(int i=0;isetFont(labelFont()); + } + } + else { for(int i=0;isetFont(defaultFont()); } - if(d_roles.contains(role)) { - switch(role) { - case RDMarkerHandle::CutStart: - case RDMarkerHandle::TalkStart: - case RDMarkerHandle::SegueStart: - case RDMarkerHandle::HookStart: - d_edits.at(0)->setFont(labelFont()); - break; - - case RDMarkerHandle::CutEnd: - case RDMarkerHandle::TalkEnd: - case RDMarkerHandle::SegueEnd: - case RDMarkerHandle::HookEnd: - d_edits.at(1)->setFont(labelFont()); - break; - - case RDMarkerHandle::FadeUp: - case RDMarkerHandle::FadeDown: - d_edits.at(0)->setFont(labelFont()); - break; - - case RDMarkerHandle::LastRole: - break; - } - } - d_selected_marker=role; } } diff --git a/lib/rdmarkerreadout.h b/lib/rdmarkerreadout.h index dcb0af8f..80f11989 100644 --- a/lib/rdmarkerreadout.h +++ b/lib/rdmarkerreadout.h @@ -38,7 +38,8 @@ class RDMarkerReadout : public RDWidget public slots: void setValue(RDMarkerHandle::PointerRole role,int value); - void setSelectedMarker(RDMarkerHandle::PointerRole role); + void setSelectedMarkers(RDMarkerHandle::PointerRole start_role, + RDMarkerHandle::PointerRole end_role); void setEnabled(bool state); void setDisabled(bool state); diff --git a/lib/rdmarkerview.cpp b/lib/rdmarkerview.cpp index 3de8684a..f578c61f 100644 --- a/lib/rdmarkerview.cpp +++ b/lib/rdmarkerview.cpp @@ -442,9 +442,10 @@ int RDMarkerView::pointerValue(RDMarkerHandle::PointerRole role) } -RDMarkerHandle::PointerRole RDMarkerView::selectedMarker() const +RDMarkerHandle::PointerRole +RDMarkerView::selectedMarker(RDMarkerHandle::PointerType type) const { - return d_selected_marker; + return d_selected_markers[type]; } @@ -456,17 +457,59 @@ bool RDMarkerView::hasUnsavedChanges() const void RDMarkerView::setSelectedMarker(RDMarkerHandle::PointerRole role) { - if(role!=d_selected_marker) { - for(int i=0;isetSelected(role==(RDMarkerHandle::PointerRole)i); + switch(role) { + case RDMarkerHandle::CutEnd: + case RDMarkerHandle::TalkEnd: + case RDMarkerHandle::SegueEnd: + case RDMarkerHandle::HookEnd: + d_selected_markers[0]=(RDMarkerHandle::PointerRole)((int)role-1); + d_selected_markers[1]=role; + break; + + case RDMarkerHandle::CutStart: + case RDMarkerHandle::TalkStart: + case RDMarkerHandle::SegueStart: + case RDMarkerHandle::HookStart: + d_selected_markers[0]=role; + d_selected_markers[1]=(RDMarkerHandle::PointerRole)((int)role+1); + break; + + case RDMarkerHandle::FadeUp: + d_selected_markers[0]=RDMarkerHandle::LastRole; + d_selected_markers[1]=RDMarkerHandle::FadeUp; + break; + + case RDMarkerHandle::FadeDown: + if(role!=d_selected_markers[0]) { + for(int i=0;i + setSelected(role==(RDMarkerHandle::PointerRole)i); + } } } } + d_selected_markers[0]=RDMarkerHandle::FadeDown; + d_selected_markers[1]=RDMarkerHandle::LastRole; + break; + + case RDMarkerHandle::LastRole: + d_selected_markers[0]=RDMarkerHandle::LastRole; + d_selected_markers[1]=RDMarkerHandle::LastRole; + break; } - d_selected_marker=role; - emit selectedMarkerChanged(role); + for(int i=0;i + setSelected(d_selected_markers[0]==(RDMarkerHandle::PointerRole)i); + d_handles[i+1][j]-> + setSelected(d_selected_markers[1]==(RDMarkerHandle::PointerRole)i+1); + } + } + } + emit selectedMarkersChanged(d_selected_markers[0],d_selected_markers[1]); } @@ -604,7 +647,8 @@ void RDMarkerView::clear() d_audio_length=0; d_has_unsaved_changes=false; d_marker_menu_used=false; - d_selected_marker=RDMarkerHandle::LastRole; + d_selected_markers[0]=RDMarkerHandle::LastRole; + d_selected_markers[1]=RDMarkerHandle::LastRole; } @@ -925,7 +969,6 @@ void RDMarkerView::mousePressEvent(QMouseEvent *e) void RDMarkerView::wheelEvent(QWheelEvent *e) { d_wheel_angle+=e->angleDelta().y(); - // printf("Angle: %d\n",d_wheel_angle); if(d_wheel_angle>=360) { if(shrinkFactor()>1) { @@ -1039,13 +1082,15 @@ void RDMarkerView::DrawMarker(RDMarkerHandle::PointerType type, d_scene->addItem(m_item); m_item->setPos(LEFT_MARGIN+Frame(d_pointers[role]),handle_pos-12); d_handles[role][0]=m_item; - m_item->setSelected(d_selected_marker==role); + m_item-> + setSelected((d_selected_markers[0]==role)||(d_selected_markers[1]==role)); m_item=new RDMarkerHandle(role,type,this); 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; - m_item->setSelected(d_selected_marker==role); + m_item-> + setSelected((d_selected_markers[0]==role)||(d_selected_markers[1]==role)); } } diff --git a/lib/rdmarkerview.h b/lib/rdmarkerview.h index cfa51ff5..b3b0ca3c 100644 --- a/lib/rdmarkerview.h +++ b/lib/rdmarkerview.h @@ -89,7 +89,8 @@ class RDMarkerView : public QWidget unsigned sampleRate() const; int shrinkFactor() const; int pointerValue(RDMarkerHandle::PointerRole role); - RDMarkerHandle::PointerRole selectedMarker() const; + RDMarkerHandle::PointerRole selectedMarker(RDMarkerHandle::PointerType type) + const; bool hasUnsavedChanges() const; void setSelectedMarker(RDMarkerHandle::PointerRole role); @@ -100,7 +101,8 @@ class RDMarkerView : public QWidget signals: void positionClicked(int msec); void pointerValueChanged(RDMarkerHandle::PointerRole role,int msec); - void selectedMarkerChanged(RDMarkerHandle::PointerRole role); + void selectedMarkersChanged(RDMarkerHandle::PointerRole start_role, + RDMarkerHandle::PointerRole end_role); public slots: void setAudioGain(int lvl); @@ -167,7 +169,7 @@ class RDMarkerView : public QWidget QList d_deleting_roles; QAction *d_delete_marker_action; bool d_marker_menu_used; - RDMarkerHandle::PointerRole d_selected_marker; + RDMarkerHandle::PointerRole d_selected_markers[2]; int d_wheel_angle; };