nice control center
This commit is contained in:
@@ -3,6 +3,7 @@
|
||||
#include <cstdint>
|
||||
#include <giomm.h>
|
||||
#include <sigc++/sigc++.h>
|
||||
#include <set>
|
||||
#include <vector>
|
||||
#include "services/dbus/messages.hpp"
|
||||
|
||||
@@ -21,6 +22,9 @@ class MprisController {
|
||||
};
|
||||
|
||||
static std::shared_ptr<MprisController> getInstance();
|
||||
static std::shared_ptr<MprisController> createForPlayer(const std::string &bus_name);
|
||||
|
||||
std::vector<std::string> get_registered_players() const;
|
||||
|
||||
void toggle_play();
|
||||
void pause();
|
||||
@@ -32,11 +36,13 @@ class MprisController {
|
||||
sigc::signal<void(const MprisPlayer2Message &)> &signal_mpris_updated();
|
||||
sigc::signal<void(PlaybackStatus)> &signal_playback_status_changed();
|
||||
sigc::signal<void(int64_t)> &signal_playback_position_changed();
|
||||
sigc::signal<void(bool)> &signal_can_seek_changed();
|
||||
sigc::signal<void(const std::string &)> &signal_player_registered();
|
||||
sigc::signal<void(const std::string &)> &signal_player_deregistered();
|
||||
|
||||
private:
|
||||
MprisController();
|
||||
explicit MprisController(const std::string &bus_name);
|
||||
std::map<std::string, PlaybackStatus> playbackStatusMap = {
|
||||
{"Playing", PlaybackStatus::Playing},
|
||||
{"Paused", PlaybackStatus::Paused},
|
||||
@@ -49,10 +55,12 @@ class MprisController {
|
||||
Glib::RefPtr<Gio::DBus::Proxy> m_proxy;
|
||||
Glib::RefPtr<Gio::DBus::Proxy> m_dbus_proxy;
|
||||
std::string m_player_bus_name = "org.mpris.MediaPlayer2.spotify";
|
||||
std::set<std::string> registeredPlayers;
|
||||
|
||||
sigc::signal<void(const MprisPlayer2Message &)> mprisUpdatedSignal;
|
||||
sigc::signal<void(PlaybackStatus)> playbackStatusChangedSignal;
|
||||
sigc::signal<void(int64_t)> playbackPositionChangedSignal;
|
||||
sigc::signal<void(bool)> canSeekChangedSignal;
|
||||
sigc::signal<void(const std::string &)> playerRegisteredSignal;
|
||||
sigc::signal<void(const std::string &)> playerDeregisteredSignal;
|
||||
|
||||
@@ -60,6 +68,7 @@ class MprisController {
|
||||
void signalNotification();
|
||||
void emit_cached_playback_status();
|
||||
void emit_cached_position();
|
||||
void emit_cached_can_seek();
|
||||
void on_dbus_signal(const Glib::ustring &sender_name,
|
||||
const Glib::ustring &signal_name,
|
||||
const Glib::VariantContainerBase ¶meters);
|
||||
|
||||
@@ -2,14 +2,30 @@
|
||||
|
||||
#include "components/popover.hpp"
|
||||
#include "gtkmm/box.h"
|
||||
#include "gtkmm/button.h"
|
||||
#include "gtkmm/label.h"
|
||||
#include "gtkmm/stack.h"
|
||||
#include "widgets/controlCenter/mediaControl.hpp"
|
||||
|
||||
#include <unordered_map>
|
||||
|
||||
class ControlCenter : public Popover {
|
||||
public:
|
||||
ControlCenter(std::string icon, std::string name);
|
||||
|
||||
private:
|
||||
Gtk::Box container;
|
||||
MediaControlWidget mediaControlWidget;
|
||||
Gtk::Box tabRow;
|
||||
Gtk::Stack contentStack;
|
||||
Gtk::Box controlCenterContainer;
|
||||
Gtk::Label testLabel;
|
||||
Gtk::Button mediaControl;
|
||||
Gtk::Button testTabButton;
|
||||
std::shared_ptr<MprisController> mprisController = MprisController::getInstance();
|
||||
std::unordered_map<std::string, MediaControlWidget*> mediaWidgets;
|
||||
|
||||
void addPlayerWidget(const std::string &bus_name);
|
||||
void removePlayerWidget(const std::string &bus_name);
|
||||
void setActiveTab(const std::string &tab_name);
|
||||
|
||||
};
|
||||
@@ -11,10 +11,10 @@
|
||||
|
||||
class MediaControlWidget : public Gtk::Box {
|
||||
public:
|
||||
MediaControlWidget();
|
||||
explicit MediaControlWidget(std::shared_ptr<MprisController> controller);
|
||||
|
||||
private:
|
||||
std::shared_ptr<MprisController> mprisController = MprisController::getInstance();
|
||||
std::shared_ptr<MprisController> mprisController;
|
||||
|
||||
int64_t currentPositionUs = 0;
|
||||
int64_t totalLengthUs = 0;
|
||||
@@ -22,12 +22,14 @@ class MediaControlWidget : public Gtk::Box {
|
||||
bool suppressSeekSignal = false;
|
||||
std::string currentTrackId;
|
||||
MprisController::PlaybackStatus playbackStatus = MprisController::PlaybackStatus::Stopped;
|
||||
bool canSeek = true;
|
||||
|
||||
void setCurrentPosition(int64_t position_us);
|
||||
void setTotalLength(int64_t length_us);
|
||||
void resetSeekTimer(int64_t start_position_us);
|
||||
bool onSeekTick();
|
||||
void schedulePauseAfterSeek();
|
||||
void setCanSeek(bool can_seek);
|
||||
|
||||
Gtk::Box spotifyContainer;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user