Files
bar/include/widgets/bluetooth.hpp
2025-12-30 21:55:11 +01:00

68 lines
1.9 KiB
C++

#pragma once
#include <gtkmm/box.h>
#include <gtkmm/button.h>
#include <gtkmm/label.h>
#include "components/base/button.hpp"
class BluetoothEntry : Gtk::Box {
public:
BluetoothEntry(std::string name, std::string address) {
this->set_orientation(Gtk::Orientation::VERTICAL);
this->add_css_class("bluetooth-entry-box");
auto nameLabel = Gtk::make_managed<Gtk::Label>(name);
nameLabel->set_halign(Gtk::Align::START);
nameLabel->add_css_class("bluetooth-entry-name");
this->append(*nameLabel);
auto addressLabel = Gtk::make_managed<Gtk::Label>(address);
addressLabel->set_halign(Gtk::Align::START);
addressLabel->add_css_class("bluetooth-entry-address");
this->append(*addressLabel);
this->add_css_class("bluetooth-entry");
auto connectButton = Gtk::make_managed<Button>("Connect");
connectButton->set_halign(Gtk::Align::END);
connectButton->set_tooltip_text("Connect to Device");
connectButton->onClickedSignal.connect([this, address]() {
this->connect_clicked.emit(address);
});
this->append(*connectButton);
}
sigc::signal<void(std::string)> connect_clicked;
};
class BluetoothWidget : public Gtk::Box {
public:
BluetoothWidget();
void setPowerState(bool state);
void setIsDiscovering(bool state);
sigc::signal<void()> onPowerStateButtonClickedSignal;
sigc::signal<void()> onIsDiscoveringButtonClickedSignal;
void update();
private:
bool isPowered = false;
bool isDiscovering = false;
Gtk::Box statusArea;
std::map<std::string, BluetoothEntry *> deviceEntries;
Gtk::Box devicesArea;
Button *scanButton = nullptr;
Button *powerButton = nullptr;
void onPowerButtonClicked();
void onScanButtonClicked();
void toggleButton(Button *button, bool state);
};