3#include <score/tools/FilePath.hpp>
4#include <Process/Dataflow/ControlWidgets.hpp>
6#include <Media/MediaFileHandle.hpp>
8#include <score/tools/ProjectFiles.hpp>
10#include <nano_observer.hpp>
11#include <score_plugin_media_export.h>
14class WaveformRenderer;
21 ,
public QGraphicsItem
22 ,
public Nano::Observer
32 void pressed() E_SIGNAL(SCORE_PLUGIN_MEDIA_EXPORT, pressed);
33 void dropped(QString filename) E_SIGNAL(SCORE_PLUGIN_MEDIA_EXPORT, dropped, filename);
36 const QString& text()
const noexcept {
return m_string; }
39 bool hasWaveform()
const noexcept;
44 void setFile(
const QString& s,
const QString& absolute);
45 QRectF boundingRect()
const override;
48 void mousePressEvent(QGraphicsSceneMouseEvent* event)
override;
49 void mouseMoveEvent(QGraphicsSceneMouseEvent* event)
override;
50 void mouseReleaseEvent(QGraphicsSceneMouseEvent* event)
override;
52 void dragEnterEvent(QGraphicsSceneDragDropEvent* event)
override;
53 void dragMoveEvent(QGraphicsSceneDragDropEvent* event)
override;
54 void dragLeaveEvent(QGraphicsSceneDragDropEvent* event)
override;
55 void dropEvent(QGraphicsSceneDragDropEvent* event)
override;
57 void paint(QPainter* painter,
const QStyleOptionGraphicsItem* option, QWidget* widget)
61 std::unique_ptr<Media::Sound::WaveformRenderer> m_waveform;
70 template <
typename T,
typename Control_T>
73 QGraphicsItem* parent, QObject* context)
76 auto on_open = [&inlet, &ctx] {
77 const auto current = QString::fromStdString(ossia::convert<std::string>(inlet.value()));
78 WidgetFactory::openFileToImport(
80 [&inlet, &ctx](
const QString& filename) {
83 auto path = score::relativizeFilePath(filename, ctx);
84 CommandDispatcher<>{ctx.commandStack}
85 .submit<WidgetFactory::SetControlValue<Control_T>>(
86 inlet, path.toStdString());
89 auto on_set = [&inlet, &ctx](
const QString& filename) {
90 if(filename.isEmpty())
94 .submit<WidgetFactory::SetControlValue<Control_T>>(
95 inlet, filename.toStdString());
97 QObject::connect(bt, &score::QGraphicsWaveformButton::pressed, &inlet, on_open);
98 QObject::connect(bt, &score::QGraphicsWaveformButton::dropped, &inlet, on_set);
99 auto set = [bt, &ctx](
const ossia::value& val) {
100 auto str = QString::fromStdString(ossia::convert<std::string>(val));
101 if(str != bt->text())
111 QObject::connect(&inlet, &Control_T::valueChanged, bt, set);
The CommandDispatcher class.
Definition CommandDispatcher.hpp:13
Base toolkit upon which the software is built.
Definition Application.cpp:83
QString locateFilePath(const QString &filename) noexcept
Definition File.cpp:84
QString pickerStartFolder(const QString ¤t, const score::DocumentContext &ctx) noexcept
Definition File.cpp:293
Definition DocumentContext.hpp:18