2021-03-20 Fred Gleason <fredg@paravelsystems.com>

* Refactored the 'RDMarkerDialog' dialog to select markers by pairs
	rather than singly.

Signed-off-by: Fred Gleason <fredg@paravelsystems.com>
This commit is contained in:
Fred Gleason
2021-03-20 19:00:55 -04:00
parent c96955b767
commit 346fe9ec1e
8 changed files with 217 additions and 174 deletions

View File

@@ -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 <fredg@paravelsystems.com>
* Refactored the 'RDMarkerDialog' dialog to select markers by pairs
rather than singly.

View File

@@ -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;i<RDMarkerHandle::LastRole;i++) {
RDMarkerHandle::PointerRole role=(RDMarkerHandle::PointerRole)i;
d_cut_readout->setValue(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);

View File

@@ -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;
}

View File

@@ -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];
};

View File

@@ -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;i<d_edits.size();i++) {
d_edits.at(i)->setFont(labelFont());
}
}
else {
for(int i=0;i<d_edits.size();i++) {
d_edits.at(i)->setFont(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;
}
}

View File

@@ -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);

View File

@@ -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;i<RDMarkerHandle::LastRole;i++) {
for(int j=0;j<2;j++) {
if(d_handles[i][j]!=NULL) {
d_handles[i][j]->setSelected(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<RDMarkerHandle::LastRole;i++) {
for(int j=0;j<2;j++) {
if(d_handles[i][j]!=NULL) {
d_handles[i][j]->
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<RDMarkerHandle::LastRole;i+=2) {
for(int j=0;j<2;j++) {
if(d_handles[i][j]!=NULL) {
d_handles[i][j]->
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));
}
}

View File

@@ -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<RDMarkerHandle::PointerRole> 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;
};