Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions Changelog.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,15 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

## [Unreleased]

### Added

* Support Plugin V4 API which allows selecting a playlist entry by index.
**Note:** The CD Player volume will use the new `mstarPlayerVolumeChanged` instead of `mstarTrackVolumeChanged` like in previous API versions.

### Fixes

* The dialogs to edit or remove files of a track work again.
* Actually call `mstarPlayerVolumeChanged` for plugins.

## [1.3.0] - 2026-02-07

Expand Down
6 changes: 5 additions & 1 deletion Source/CDPlayer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -249,6 +249,10 @@ void CDPlayer::previousEntry()
{
m_tracksTable.previous();
}
void CDPlayer::selectEntry(int playlist_index)
{
m_tracksTable.selectRow(playlist_index);
}
void CDPlayer::paint(juce::Graphics& g)
{
g.fillAll(m_color);
Expand Down Expand Up @@ -296,7 +300,7 @@ void CDPlayer::setGain(float gain)
{
m_gain = gain;
updateGain();
m_pluginLoader.trackVolumeChanged(getName().toRawUTF8(), "", m_gain);
m_pluginLoader.cdPlayerVolumeChanged(getName().toRawUTF8(), gain);
std::for_each(m_listeners.begin(),
m_listeners.end(),
std::bind(&MixerControlableChangeListener::gainChanged, std::placeholders::_1, gain));
Expand Down
1 change: 1 addition & 0 deletions Source/CDPlayer.h
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ class CDPlayer
void stop() override;
void nextEntry(bool onlyIfEntrySaysSo = false) override;
void previousEntry() override;
void selectEntry(int playlist_index) override;

// XML serialization
public:
Expand Down
6 changes: 6 additions & 0 deletions Source/Player.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,7 @@ void Player::setType(PlayerType type)
void Player::setGain(float gain)
{
m_tracksContainer.setGain(gain);
m_pluginLoader.playerVolumeChanged(getName().toRawUTF8(), gain);
std::for_each(m_listeners.begin(),
m_listeners.end(),
std::bind(&MixerControlableChangeListener::gainChanged, std::placeholders::_1, gain));
Expand Down Expand Up @@ -419,6 +420,11 @@ void Player::previousEntry()
m_pluginLoader.previousEntrySelected(getName().toRawUTF8());
}

void Player::selectEntry(int playlist_index)
{
m_playlistPlayer.selectPlaylistEntry(playlist_index);
}

void Player::playlistEntryChanged(const std::vector<TrackConfig>& trackConfigs, bool play, int index)
{
currentPlaylistEntry = index;
Expand Down
1 change: 1 addition & 0 deletions Source/Player.h
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ class Player
void stop() override;
void nextEntry(bool onlyIfEntrySaysSo = false) override;
void previousEntry() override;
void selectEntry(int playlist_index) override;
void playlistEntryChanged(const std::vector<TrackConfig>& trackConfigs, bool play, int index);
void gainChangedCallback(const char* track_name, float gain);

Expand Down
1 change: 1 addition & 0 deletions Source/PlayerComponent.h
Original file line number Diff line number Diff line change
Expand Up @@ -14,4 +14,5 @@ class PlayerComponent
virtual void stop() = 0;
virtual void nextEntry(bool onlyIfEntrySaysSo = false) = 0;
virtual void previousEntry() = 0;
virtual void selectEntry(int playlist_index) = 0;
};
5 changes: 5 additions & 0 deletions Source/PlaylistPlayerWindow.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -319,3 +319,8 @@ void PlaylistPlayerWindow::previousPlaylistEntry()
{
m_tableListBox.previous();
}

void PlaylistPlayerWindow::selectPlaylistEntry(int playlist_index)
{
m_tableListBox.selectRow(playlist_index);
}
2 changes: 2 additions & 0 deletions Source/PlaylistPlayerWindow.h
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,8 @@ class PlaylistPlayerWindow

void previousPlaylistEntry();

void selectPlaylistEntry(int playlist_index);

int getResizerBarPosition() const;

void setResizerBarPosition(int position);
Expand Down
48 changes: 48 additions & 0 deletions Source/PluginInterfaceV4.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
#pragma once

namespace PluginInterface::V4
{
using ListPlayersCallbackFunction = void (*)(const char* player_name, void* userData);
using ListPlayersFunction = void (*)(ListPlayersCallbackFunction callback, void* userData);
using PlayFunction = void (*)(const char* player_name);
using StopFunction = void (*)(const char* player_name);
using NextEntryFunction = void (*)(const char* player_name);
using PreviousEntryFunction = void (*)(const char* player_name);
using SelectEntryFunction = void (*)(const char* player_name, int playlist_index);
using ListTracksCallbackFunction = void (*)(const char* track_name, void* userData);
using ListTracksFunction = void (*)(const char* player_name, ListTracksCallbackFunction callback, void* userData);
using SetPlayerVolumeFunction = void (*)(const char* player_name, float volume);
using SetTrackVolumeFunction = void (*)(const char* player_name, const char* track_name, float volume);

struct Init
{
ListPlayersFunction listPlayers;
PlayFunction play;
StopFunction stop;
NextEntryFunction next;
PreviousEntryFunction previous;
SelectEntryFunction select;
ListTracksFunction listTracks;
SetTrackVolumeFunction setTrackVolume;
SetPlayerVolumeFunction setPlayerVolume;
};

using InitFunction = void (*)(const Init&);
using PlayingStateChangedFunction = void (*)(const char* playerName, bool isPlaying);
using NextEntrySelectedFunction = void (*)(const char* playerName);
using PreviousEntrySelectedFunction = void (*)(const char* playerName);
using PlaylistEntrySelectedFunction
= void (*)(const char* playerName, int playlist_index, const char* playlistEntryName, double duration);
using PlaylistEntryDurationChangedFunction = void (*)(const char* playerName, int playlist_index, double duration);
using PlaylistEntryNameChangedFunction
= void (*)(const char* playerName, int playlist_index, const char* playlistEntryName);
using TrackVolumeChangedFunction = void (*)(const char* playerName, const char* track_name, double volume);
using PlayerVolumeChangedFunction = void (*)(const char* playerName, double volume);
using PositionChangedFunction = void (*)(const char* playerName, double position);
using ConfigureFunction = void (*)();
using ShutdownFunction = void (*)();

using LoadConfigurationFunction = void (*)(const char* configurationText);
using GetConfigurationFunction = char* (*)();
using FreeConfigurationTextFunction = void (*)(const char* configurationText);
}
Loading
Loading