Skip to content

Commit

Permalink
More progress
Browse files Browse the repository at this point in the history
  • Loading branch information
messmerd committed Aug 15, 2024
1 parent b55bdec commit bda93bc
Show file tree
Hide file tree
Showing 8 changed files with 191 additions and 73 deletions.
2 changes: 2 additions & 0 deletions include/PluginPinConnector.h
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,7 @@ class LMMS_EXPORT PluginPinConnector
/**
* Getters
*/
auto trackChannelsCount() const -> std::size_t { return s_totalTrackChannels; }
auto trackChannelsUsed() const -> unsigned int { return m_trackChannelsUsed; }
auto channelCountIn() const -> int { return m_pluginInCount; }
auto channelCountOut() const -> int { return m_pluginOutCount; }
Expand Down Expand Up @@ -122,6 +123,7 @@ class LMMS_EXPORT PluginPinConnector
auto nodeName() const -> QString override { return "pins"; }

auto instantiateView(QWidget* parent = nullptr) -> gui::PluginPinConnectorView*;
auto getChannelCountText() const -> QString;

static constexpr std::size_t MaxTrackChannels = 256; // TODO: Move somewhere else

Expand Down
16 changes: 13 additions & 3 deletions include/PluginPinConnectorView.h
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,8 @@ class BoolModel;
namespace gui
{

class SubWindow;

class PluginPinConnectorView
: public QWidget
, public ModelView
Expand All @@ -51,17 +53,25 @@ class PluginPinConnectorView

auto sizeHint() const -> QSize override;

auto getChannelCountText() const -> QString;
auto subWindow() -> SubWindow* { return m_subWindow; }

public slots:
void update();

protected:
void mousePressEvent(QMouseEvent* me) override;
void paintEvent(QPaintEvent* pe) override;

private:
void calculateSizes();
auto calculateMatrixSize(bool inMatrix) const -> QSize;
auto getIcon(const BoolModel& model, int trackChannel, int pluginChannel) -> const QPixmap&;

QRect m_pinsInRect;
QRect m_pinsOutRect;
SubWindow* m_subWindow = nullptr;

QRect m_inRect;
QRect m_outRect;
QSize m_minSize;

QPixmap m_buttonOffBlack = embed::getIconPixmap("step_btn_off");
QPixmap m_buttonOffGray = embed::getIconPixmap("step_btn_off_light");
Expand Down
22 changes: 16 additions & 6 deletions plugins/Vestige/Vestige.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -970,13 +970,12 @@ ManageVestigeInstrumentView::ManageVestigeInstrumentView( VestigeInstrument * _i
l->addWidget( m_displayAutomatedOnly, 0, 1, 1, 2, Qt::AlignLeft );


m_pinConnector = m_vi->pinConnector()->instantiateView(m_vi->m_subWindow);
m_pinConnectorButton = new QPushButton{m_pinConnector->getChannelCountText(), this};
m_pinConnectorButton = new QPushButton{m_vi->pinConnector()->getChannelCountText(), this};

connect(m_pinConnectorButton, &QPushButton::clicked, this, &ManageVestigeInstrumentView::togglePinConnector);

connect(m_vi->pinConnector(), &PluginPinConnector::channelCountsChanged, this, [&]() {
m_pinConnectorButton->setText(m_pinConnector->getChannelCountText());
m_pinConnectorButton->setText(m_vi->pinConnector()->getChannelCountText());
});

l->addWidget(m_pinConnectorButton, 0, 2, 1, 2, Qt::AlignLeft);
Expand Down Expand Up @@ -1057,13 +1056,24 @@ ManageVestigeInstrumentView::ManageVestigeInstrumentView( VestigeInstrument * _i

void ManageVestigeInstrumentView::togglePinConnector()
{
if (m_pinConnector->isVisible())
if (!m_pinConnector)
{
m_pinConnector->hide();
m_pinConnector = m_vi->pinConnector()->instantiateView(m_vi->m_subWindow);
m_pinConnector->subWindow()->show();
}
else
{
m_pinConnector->show();
auto subWindow = m_pinConnector->subWindow();
if (subWindow->isVisible())
{
subWindow->hide();
m_pinConnector->hide();
}
else
{
subWindow->show();
m_pinConnector->show();
}
}
}

Expand Down
2 changes: 1 addition & 1 deletion plugins/Vestige/Vestige.h
Original file line number Diff line number Diff line change
Expand Up @@ -138,7 +138,7 @@ protected slots:
QPushButton * m_syncButton;
QPushButton * m_displayAutomatedOnly;
QPushButton* m_pinConnectorButton;
PluginPinConnectorView* m_pinConnector;
PluginPinConnectorView* m_pinConnector = nullptr;
CustomTextKnob ** vstKnobs;

} ;
Expand Down
24 changes: 17 additions & 7 deletions plugins/VstEffect/VstEffectControls.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -366,13 +366,12 @@ ManageVSTEffectView::ManageVSTEffectView( VstEffect * _eff, VstEffectControls *
l->addWidget( m_displayAutomatedOnly, 0, 1, 1, 2, Qt::AlignLeft );


m_pinConnector = m_vi->pinConnector()->instantiateView(m_vi->m_subWindow);
m_pinConnectorButton = new QPushButton{m_pinConnector->getChannelCountText(), widget};
m_pinConnectorButton = new QPushButton{m_vi->pinConnector()->getChannelCountText(), widget};

connect(m_pinConnectorButton, &QPushButton::clicked, this, &ManageVSTEffectView::togglePinConnector);

connect(m_vi->pinConnector(), &PluginPinConnector::channelCountsChanged, this, [&]() {
m_pinConnectorButton->setText(m_pinConnector->getChannelCountText());
connect(m_vi->pinConnector(), &PluginPinConnector::propertiesChanged, this, [&]() {
m_pinConnectorButton->setText(m_vi->pinConnector()->getChannelCountText());
});

l->addWidget(m_pinConnectorButton, 0, 2, 1, 2, Qt::AlignLeft);
Expand Down Expand Up @@ -455,13 +454,24 @@ ManageVSTEffectView::ManageVSTEffectView( VstEffect * _eff, VstEffectControls *

void ManageVSTEffectView::togglePinConnector()
{
if (m_pinConnector->isVisible())
if (!m_pinConnector)
{
m_pinConnector->hide();
m_pinConnector = m_vi2->pinConnector()->instantiateView(m_vi2->m_subWindow);
m_pinConnector->subWindow()->show();
}
else
{
m_pinConnector->show();
auto subWindow = m_pinConnector->subWindow();
if (subWindow->isVisible())
{
subWindow->hide();
m_pinConnector->hide();
}
else
{
subWindow->show();
m_pinConnector->show();
}
}
}

Expand Down
2 changes: 1 addition & 1 deletion plugins/VstEffect/VstEffectControls.h
Original file line number Diff line number Diff line change
Expand Up @@ -142,7 +142,7 @@ protected slots:
QPushButton * m_syncButton;
QPushButton * m_displayAutomatedOnly;
QPushButton* m_pinConnectorButton;
PluginPinConnectorView* m_pinConnector;
PluginPinConnectorView* m_pinConnector = nullptr;
CustomTextKnob ** vstKnobs;

} ;
Expand Down
22 changes: 18 additions & 4 deletions src/core/PluginPinConnector.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -452,13 +452,27 @@ auto PluginPinConnector::instantiateView(QWidget* parent) -> gui::PluginPinConne
{
auto view = new gui::PluginPinConnectorView{parent};
view->setModel(this);
connect(this, &PluginPinConnector::dataChanged,
view, static_cast<void(gui::PluginPinConnectorView::*)()>(&gui::PluginPinConnectorView::update));
connect(this, &PluginPinConnector::propertiesChanged,
view, static_cast<void(gui::PluginPinConnectorView::*)()>(&gui::PluginPinConnectorView::update));

connect(this, &PluginPinConnector::dataChanged, view, &gui::PluginPinConnectorView::update);
connect(this, &PluginPinConnector::propertiesChanged, view, &gui::PluginPinConnectorView::update);
view->update();

return view;
}

auto PluginPinConnector::getChannelCountText() const -> QString
{
const auto inText = m_pluginInCount > static_cast<int>(s_totalTrackChannels)
? QString{"%1/%2"}.arg(s_totalTrackChannels).arg(m_pluginInCount)
: QString{"%1"}.arg(m_pluginInCount);

const auto outText = m_pluginOutCount > static_cast<int>(s_totalTrackChannels)
? QString{"%1/%2"}.arg(s_totalTrackChannels).arg(m_pluginOutCount)
: QString{"%1"}.arg(m_pluginOutCount);

return QString{tr("%1 in %2 out")}.arg(inText).arg(outText);
}

void PluginPinConnector::updateTrackChannels(int count)
{
if (count < 2) { throw std::invalid_argument{"There must be at least 2 track channels"}; }
Expand Down
Loading

0 comments on commit bda93bc

Please sign in to comment.