diff options
author | Bent Bisballe Nyeng <deva@aasimon.org> | 2013-05-09 12:04:49 +0200 |
---|---|---|
committer | Bent Bisballe Nyeng <deva@aasimon.org> | 2013-05-09 12:04:49 +0200 |
commit | 14041f774fc25ea1372587c344c42cdc57172155 (patch) | |
tree | c953eb1b7e0b5ef771950665de02c44c42ab8206 | |
parent | a4d73c0cb2321bd61bd31d2922ae469389e5825e (diff) |
Click sorted samples hilight the corresponding canvas selection.
-rw-r--r-- | dgedit/canvastoolselections.cc | 13 | ||||
-rw-r--r-- | dgedit/canvastoolselections.h | 1 | ||||
-rw-r--r-- | dgedit/mainwindow.cc | 3 | ||||
-rw-r--r-- | dgedit/samplesorter.cc | 30 | ||||
-rw-r--r-- | dgedit/samplesorter.h | 5 |
5 files changed, 50 insertions, 2 deletions
diff --git a/dgedit/canvastoolselections.cc b/dgedit/canvastoolselections.cc index 5188cb0..5868b1f 100644 --- a/dgedit/canvastoolselections.cc +++ b/dgedit/canvastoolselections.cc @@ -53,6 +53,19 @@ CanvasToolSelections::CanvasToolSelections(Canvas *c) } +void CanvasToolSelections::setActiveSelection(Selection s) +{ + QMap<int, Selection>::iterator i = _selections.begin(); + while(i != _selections.end()) { + if(s.from == i.value().from && + s.to == i.value().to) active_selection = &i.value(); + i++; + } + + canvas->update(); + emit activeSelectionChanged(s); +} + bool CanvasToolSelections::mouseMoveEvent(QMouseEvent *event) { if(selection_is_moving_left) { diff --git a/dgedit/canvastoolselections.h b/dgedit/canvastoolselections.h index 99114de..64c52b8 100644 --- a/dgedit/canvastoolselections.h +++ b/dgedit/canvastoolselections.h @@ -59,6 +59,7 @@ public slots: void thresholdChanged(double threshold); void noiseFloorChanged(int t); void fadeoutChanged(int t); + void setActiveSelection(Selection s); private: bool selection_is_moving_left; diff --git a/dgedit/mainwindow.cc b/dgedit/mainwindow.cc index 7d060cb..30cd626 100644 --- a/dgedit/mainwindow.cc +++ b/dgedit/mainwindow.cc @@ -117,6 +117,9 @@ MainWindow::MainWindow() connect(selections, SIGNAL(activeSelectionChanged(Selection)), sorter, SLOT(setActiveSelection(Selection))); + connect(sorter, SIGNAL(activeSelectionChanged(Selection)), + selections, SLOT(setActiveSelection(Selection))); + lh->addWidget(canvas); lh->addWidget(yscale); lh->addWidget(yoffset); diff --git a/dgedit/samplesorter.cc b/dgedit/samplesorter.cc index 71b1654..adfdf65 100644 --- a/dgedit/samplesorter.cc +++ b/dgedit/samplesorter.cc @@ -176,10 +176,10 @@ void SampleSorter::setActiveSelection(Selection s) #define mapX(x) (((double)x)*(width()-1)) #define mapY(x) x - +#define C_RADIUS 2 static void drawCircle(QPainter &p, int x, int y) { - p.drawEllipse(x-2, y-2, 4, 4); + p.drawEllipse(x - C_RADIUS, y - C_RADIUS, 2 * C_RADIUS, 2 * C_RADIUS); } void SampleSorter::paintEvent(QPaintEvent *event) @@ -224,6 +224,26 @@ void SampleSorter::paintEvent(QPaintEvent *event) } } +Selection *SampleSorter::getSelectionByCoordinate(int px, int py) +{ + py -= C_RADIUS; + + QMap<float, Selection>::iterator i = sorted.begin(); + while(i != sorted.end()) { + float x = (i.key()/max); + x = sqrt(x); + x *= (float)width(); + if(px < (x + C_RADIUS) && px > (x - C_RADIUS) && + py < (MAP(x) + C_RADIUS) && py > (MAP(x) - C_RADIUS)) { + return &i.value(); + } + i++; + } + + return NULL; +} + + void SampleSorter::mouseMoveEvent(QMouseEvent *event) { if(cur_thr != -1 && cur_thr < threshold.size()) { @@ -250,6 +270,12 @@ void SampleSorter::mousePressEvent(QMouseEvent *event) { if(event->button() == Qt::LeftButton) { + Selection *psel = getSelectionByCoordinate(event->x(), event->y()); + if(psel) { + emit activeSelectionChanged(*psel); + return; + } + // Check if threshold is being dragged. for(size_t i = 0; i < (size_t)threshold.size(); i++) { if(abs(event->x() - mapX(threshold[i])) < 2 || diff --git a/dgedit/samplesorter.h b/dgedit/samplesorter.h index f277ff1..7b214e7 100644 --- a/dgedit/samplesorter.h +++ b/dgedit/samplesorter.h @@ -61,7 +61,12 @@ protected: void mousePressEvent(QMouseEvent *event); void mouseReleaseEvent(QMouseEvent *event); +signals: + void activeSelectionChanged(Selection selection); + private: + Selection *getSelectionByCoordinate(int x, int y); + Selections _selections; QMap<float, Selection> sorted; float min; |