From f474c3c923fe5bb27c1ee11e2c6dd57e41889f27 Mon Sep 17 00:00:00 2001 From: Bent Bisballe Nyeng Date: Sun, 2 Oct 2011 09:58:10 +0200 Subject: Made conenctions for CanvasTool work (again...). --- dgedit/canvas.cc | 8 -------- dgedit/canvas.h | 5 +++-- dgedit/canvastool.cc | 3 +++ dgedit/canvastool.h | 2 ++ dgedit/canvastoollisten.cc | 4 ++++ dgedit/canvastoollisten.h | 1 + dgedit/canvastoolselections.cc | 17 +++++++++++++---- dgedit/canvastoolselections.h | 5 +++-- dgedit/canvastoolthreshold.cc | 3 +++ dgedit/canvastoolthreshold.h | 4 ++++ dgedit/mainwindow.cc | 43 +++++++++++++++++++++++++++++++++++++----- 11 files changed, 74 insertions(+), 21 deletions(-) diff --git a/dgedit/canvas.cc b/dgedit/canvas.cc index c70f730..b119a94 100644 --- a/dgedit/canvas.cc +++ b/dgedit/canvas.cc @@ -34,10 +34,6 @@ #include -#include "canvastoolselections.h" -#include "canvastoolthreshold.h" -#include "canvastoollisten.h" - #define DEFYSCALE 200 Canvas::Canvas(QWidget *parent) @@ -67,10 +63,6 @@ Canvas::Canvas(QWidget *parent) setCursor(Qt::ArrowCursor); wav = QImage(width(), height(), QImage::Format_RGB32); - - tools.push_back(new CanvasToolListen(this)); - tools.push_back(new CanvasToolThreshold(this)); - tools.push_back(new CanvasToolSelections(this)); } Canvas::~Canvas() diff --git a/dgedit/canvas.h b/dgedit/canvas.h index 3c268ed..c83a726 100644 --- a/dgedit/canvas.h +++ b/dgedit/canvas.h @@ -75,6 +75,9 @@ private: public: float *data; size_t size; + + QVector tools; + private: float xscale; float yscale; @@ -87,8 +90,6 @@ private: QColor colHalf; QColor colWavMax; QColor colWavAvg; - - QVector tools; }; #endif/*__DRUMGIZMO_CANVAS_H__*/ diff --git a/dgedit/canvastool.cc b/dgedit/canvastool.cc index 196be0b..9d23d97 100644 --- a/dgedit/canvastool.cc +++ b/dgedit/canvastool.cc @@ -26,6 +26,8 @@ */ #include "canvastool.h" +#include + bool CanvasTool::mouseMoveEvent(QMouseEvent *) { return false; @@ -55,6 +57,7 @@ void CanvasTool::keyReleaseEvent(QKeyEvent *) void CanvasTool::setActive(bool active) { + printf("setActive(%d)\n", active); _active = active; emit activateChanged(active); } diff --git a/dgedit/canvastool.h b/dgedit/canvastool.h index 0e802ba..56cfa84 100644 --- a/dgedit/canvastool.h +++ b/dgedit/canvastool.h @@ -32,10 +32,12 @@ #include #include #include +#include class CanvasTool : public QObject { Q_OBJECT public: + virtual QString name() = 0; virtual bool mouseMoveEvent(QMouseEvent *event); virtual bool mousePressEvent(QMouseEvent *event); virtual bool mouseReleaseEvent(QMouseEvent *event); diff --git a/dgedit/canvastoollisten.cc b/dgedit/canvastoollisten.cc index 74bf176..4254137 100644 --- a/dgedit/canvastoollisten.cc +++ b/dgedit/canvastoollisten.cc @@ -86,6 +86,7 @@ CanvasToolListen::CanvasToolListen(Canvas *c) bool CanvasToolListen::mousePressEvent(QMouseEvent *event) { + if(!isActive()) return false; player.pos = canvas->unmapX(event->x()); player.playing = true; canvas->update(); @@ -95,6 +96,7 @@ bool CanvasToolListen::mousePressEvent(QMouseEvent *event) bool CanvasToolListen::mouseReleaseEvent(QMouseEvent *event) { + if(!isActive()) return false; player.playing = false; timer.stop(); lastpos = 0; @@ -104,6 +106,8 @@ bool CanvasToolListen::mouseReleaseEvent(QMouseEvent *event) void CanvasToolListen::paintEvent(QPaintEvent *event, QPainter &painter) { + if(!isActive()) return; + if(player.playing) { painter.setPen(QColor(0, 127, 127)); painter.drawLine(canvas->mapX(player.pos), diff --git a/dgedit/canvastoollisten.h b/dgedit/canvastoollisten.h index 22daafd..74a7831 100644 --- a/dgedit/canvastoollisten.h +++ b/dgedit/canvastoollisten.h @@ -56,6 +56,7 @@ Q_OBJECT public: CanvasToolListen(Canvas *canvas); + QString name() { return "Listen"; } bool mousePressEvent(QMouseEvent *event); bool mouseReleaseEvent(QMouseEvent *event); void paintEvent(QPaintEvent *event, QPainter &painter); diff --git a/dgedit/canvastoolselections.cc b/dgedit/canvastoolselections.cc index 51cc1ad..ba2d6b0 100644 --- a/dgedit/canvastoolselections.cc +++ b/dgedit/canvastoolselections.cc @@ -27,6 +27,7 @@ #include "canvastoolselections.h" #include +#include #define mapX(x) canvas->mapX(x) #define mapY(x) canvas->mapY(x) @@ -35,9 +36,11 @@ CanvasToolSelections::CanvasToolSelections(Canvas *c) { + threshold = 0.5; // Default from CanvasToolThreshold + canvas = c; - data = canvas->data; - size = canvas->size; + // data = canvas->data; + // size = canvas->size; selection_is_moving_left = false; selection_is_moving_right = false; @@ -185,9 +188,16 @@ void CanvasToolSelections::keyReleaseEvent(QKeyEvent *event) } } +void CanvasToolSelections::thresholdChanged(double t) +{ + threshold = t; +} + void CanvasToolSelections::autoCreateSelections() { - /* + float *data = canvas->data; + size_t size = canvas->size; + for(size_t i = 0; i < size; i++) { if(fabs(data[i]) > fabs(threshold)) { int from = i; @@ -224,7 +234,6 @@ void CanvasToolSelections::autoCreateSelections() } canvas->update(); emit selectionsChanged(_selections); - */ } void CanvasToolSelections::clearSelections() diff --git a/dgedit/canvastoolselections.h b/dgedit/canvastoolselections.h index a8b37a3..a9e4d56 100644 --- a/dgedit/canvastoolselections.h +++ b/dgedit/canvastoolselections.h @@ -40,6 +40,7 @@ Q_OBJECT public: CanvasToolSelections(Canvas *canvas); + QString name() { return "Selections"; } bool mouseMoveEvent(QMouseEvent *event); bool mousePressEvent(QMouseEvent *event); bool mouseReleaseEvent(QMouseEvent *event); @@ -55,6 +56,7 @@ signals: public slots: void autoCreateSelections(); void clearSelections(); + void thresholdChanged(double threshold); private: bool selection_is_moving_left; @@ -64,8 +66,7 @@ private: Canvas *canvas; - float *data; - size_t size; + double threshold; QColor colSelBg; QColor colSel; diff --git a/dgedit/canvastoolthreshold.cc b/dgedit/canvastoolthreshold.cc index e933592..d8e2dff 100644 --- a/dgedit/canvastoolthreshold.cc +++ b/dgedit/canvastoolthreshold.cc @@ -87,6 +87,9 @@ bool CanvasToolThreshold::mouseReleaseEvent(QMouseEvent *event) threshold_is_moving = false; canvas->setCursor(Qt::ArrowCursor); canvas->update(); + + emit thresholdChanged(threshold); + return true; } } diff --git a/dgedit/canvastoolthreshold.h b/dgedit/canvastoolthreshold.h index b19bf01..0c593e8 100644 --- a/dgedit/canvastoolthreshold.h +++ b/dgedit/canvastoolthreshold.h @@ -38,11 +38,15 @@ Q_OBJECT public: CanvasToolThreshold(Canvas *canvas); + QString name() { return "Threshold"; } bool mouseMoveEvent(QMouseEvent *event); bool mousePressEvent(QMouseEvent *event); bool mouseReleaseEvent(QMouseEvent *event); void paintEvent(QPaintEvent *event, QPainter &painter); +signals: + void thresholdChanged(double threshold); + private: float threshold; bool threshold_is_moving; diff --git a/dgedit/mainwindow.cc b/dgedit/mainwindow.cc index 9454a97..c750a22 100644 --- a/dgedit/mainwindow.cc +++ b/dgedit/mainwindow.cc @@ -36,11 +36,29 @@ #include #include #include +#include +#include +#include + +#include "canvastool.h" +#include "canvastoolselections.h" +#include "canvastoolthreshold.h" +#include "canvastoollisten.h" #define MAXVAL 10000000L #define SINGLESTEP MAXVAL/100000 #define PAGESTEP MAXVAL/10000 +static void addTool(QToolBar *toolbar, Canvas *canvas, CanvasTool *tool) +{ + QAction *action = new QAction(tool->name(), toolbar); + action->setCheckable(true); + toolbar->addAction(action); + tool->connect(action, SIGNAL(toggled(bool)), tool, SLOT(setActive(bool))); + tool->setActive(false); + canvas->tools.push_back(tool); +} + MainWindow::MainWindow() { QWidget *central = new QWidget(); @@ -52,6 +70,21 @@ MainWindow::MainWindow() extractor = new AudioExtractor(this); canvas = new Canvas(this); + QToolBar *toolbar = addToolBar("Tools"); + CanvasTool *listen = new CanvasToolListen(canvas); + addTool(toolbar, canvas, listen); + CanvasTool *threshold = new CanvasToolThreshold(canvas); + addTool(toolbar, canvas, threshold); + CanvasTool *selections = new CanvasToolSelections(canvas); + connect(threshold, SIGNAL(thresholdChanged(double)), + selections, SLOT(thresholdChanged(double))); + addTool(toolbar, canvas, selections); + + QMenu *fileMenu = menuBar()->addMenu("&File"); + QAction *act_quit = new QAction("&Quit", this); + fileMenu->addAction(act_quit); + connect(act_quit, SIGNAL(triggered()), this, SLOT(close())); + QWidget *dock = new QWidget(); yoffset = new QScrollBar(Qt::Vertical); yoffset->setRange(0, MAXVAL); @@ -78,9 +111,9 @@ MainWindow::MainWindow() connect(xoffset, SIGNAL(valueChanged(int)), this, SLOT(setXOffset(int))); sorter = new SampleSorter(); - connect(canvas, SIGNAL(selectionsChanged(Selections)), + connect(selections, SIGNAL(selectionsChanged(Selections)), sorter, SLOT(setSelections(Selections))); - connect(canvas, SIGNAL(activeSelectionChanged(Selection)), + connect(selections, SIGNAL(activeSelectionChanged(Selection)), sorter, SLOT(setActiveSelection(Selection))); lh->addWidget(canvas); @@ -96,12 +129,12 @@ MainWindow::MainWindow() QPushButton *autosel = new QPushButton(); autosel->setText("Auto"); - connect(autosel, SIGNAL(clicked()), canvas, SLOT(clearSelections())); - connect(autosel, SIGNAL(clicked()), canvas, SLOT(autoCreateSelections())); + connect(autosel, SIGNAL(clicked()), selections, SLOT(clearSelections())); + connect(autosel, SIGNAL(clicked()), selections, SLOT(autoCreateSelections())); QPushButton *clearsel = new QPushButton(); clearsel->setText("Clear"); - connect(clearsel, SIGNAL(clicked()), canvas, SLOT(clearSelections())); + connect(clearsel, SIGNAL(clicked()), selections, SLOT(clearSelections())); QPushButton *exportsel = new QPushButton(); exportsel->setText("Export"); -- cgit v1.2.3