diff --git a/ChangeLog b/ChangeLog index 56c046ba..ae8cb73c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -21269,3 +21269,5 @@ * Added a 'RDMarkerDialog' class. 2021-03-12 Fred Gleason * Added a 'RDMarkerReadout' class. +2021-03-15 Fred Gleason + * Implemented saving marker positions in 'RDMarkerDialog'. diff --git a/lib/rdmarkerdialog.cpp b/lib/rdmarkerdialog.cpp index 674d0b00..9f079b64 100644 --- a/lib/rdmarkerdialog.cpp +++ b/lib/rdmarkerdialog.cpp @@ -297,14 +297,16 @@ void RDMarkerDialog::cancelData() break; default: - break; + return; } } + done(false); } void RDMarkerDialog::closeEvent(QCloseEvent *e) { + e->ignore(); cancelData(); } diff --git a/lib/rdmarkerview.cpp b/lib/rdmarkerview.cpp index efa6a5a3..85c41250 100644 --- a/lib/rdmarkerview.cpp +++ b/lib/rdmarkerview.cpp @@ -36,7 +36,7 @@ RDMarkerHandle::RDMarkerHandle(RDMarkerHandle::PointerRole role, { setFlags(QGraphicsItem::ItemIsMovable); d_marker_view=mkrview; - d_minimum=-1; + d_minimum=0; d_maximum=-1; QPolygonF triangle; @@ -123,19 +123,35 @@ void RDMarkerHandle::mouseMoveEvent(QGraphicsSceneMouseEvent *e) { RDMarkerView *view=static_cast(d_marker_view); + // + // Check Limits + // + int corr=0; + int x=pos().x()-LEFT_MARGIN; + if(xpos().x()-e->lastPos().x()+corr; + for(int i=0;isetPos(peer->pos().x()+dx,peer->pos().y()); + } + /* qreal dx=e->pos().rx()-e->lastPos().rx(); for(int i=0;isetPos(peer->pos().rx()+dx,peer->pos().ry()); } - + */ // // Send Position // - view->updatePosition(d_role,pos().x()-LEFT_MARGIN); + view->updatePosition(d_role,x-corr); + // view->updatePosition(d_role,pos().x()-LEFT_MARGIN); } @@ -146,7 +162,7 @@ void RDMarkerHandle::mouseReleaseEvent(QGraphicsSceneMouseEvent *e) // // Send Position // - view->updatePosition(d_role,pos().x()-LEFT_MARGIN); + // view->updatePosition(d_role,pos().x()-LEFT_MARGIN); } @@ -363,6 +379,8 @@ void RDMarkerView::updatePosition(RDMarkerHandle::PointerRole role, int offset) d_pointers[role]=(int)((int64_t)1000*pframes/(int64_t)d_sample_rate); d_has_unsaved_changes=true; + updateInterlocks(); + emit pointerValueChanged(role,d_pointers[role]); } @@ -410,6 +428,8 @@ bool RDMarkerView::setCut(QString *err_msg,unsigned cartnum,int cutnum) d_shrink_factor=d_max_shrink_factor; WriteWave(); + updateInterlocks(); + return true; } @@ -447,6 +467,21 @@ void RDMarkerView::clear() } +void RDMarkerView::updateInterlocks() +{ + for(int i=0;i<2;i++) { + d_handles[RDMarkerHandle::CutStart][i]->setMinimum(0); + d_handles[RDMarkerHandle::CutStart][i]-> + setMaximum(d_handles[RDMarkerHandle::CutEnd][i]->pos().x()-LEFT_MARGIN); + + d_handles[RDMarkerHandle::CutEnd][i]-> + setMinimum(d_handles[RDMarkerHandle::CutStart][i]->pos().x()-LEFT_MARGIN); + // d_handles[RDMarkerHandle::CutStart][i]-> + // setMaximum(); + } +} + + void RDMarkerView::resizeEvent(QResizeEvent *e) { d_view->setGeometry(0,0,size().width(),size().height()); @@ -534,9 +569,11 @@ void RDMarkerView::DrawMarker(RDMarkerHandle::PointerType type, m_item=new RDMarkerHandle(role,type,this); 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=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; } } diff --git a/lib/rdmarkerview.h b/lib/rdmarkerview.h index d56e4053..6d673ea5 100644 --- a/lib/rdmarkerview.h +++ b/lib/rdmarkerview.h @@ -93,6 +93,7 @@ class RDMarkerView : public QWidget void pointerValueChanged(RDMarkerHandle::PointerRole role,int msec); protected: + virtual void updateInterlocks(); void resizeEvent(QResizeEvent *e); private: @@ -117,6 +118,7 @@ class RDMarkerView : public QWidget RDWaveFactory *d_wave_factory; bool d_has_unsaved_changes; int d_pointers[RDMarkerHandle::LastRole]; + RDMarkerHandle *d_handles[RDMarkerHandle::LastRole][2]; };