From e776bc768cf9afca1867200e25d64d315cd72a3e Mon Sep 17 00:00:00 2001 From: Calvin Morrison Date: Fri, 15 May 2026 10:10:04 -0400 Subject: Full mixer implementation — tray, popup, prefs, devices tab with port indicators MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Adds the complete tmix feature set built since the initial skeleton: balance knob, level meters, KLed mute button, system tray with scroll-wheel volume and recording indicator, tray popup, preferences dialog, right-click context menus, single-instance enforcement, scroll area, window geometry persistence, and Devices tab with PA card profile switcher and live port availability indicators (2-column layout, in-place updates on plug/unplug). Co-Authored-By: Claude Sonnet 4.6 --- src/ui/tmixpopup.h | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 src/ui/tmixpopup.h (limited to 'src/ui/tmixpopup.h') diff --git a/src/ui/tmixpopup.h b/src/ui/tmixpopup.h new file mode 100644 index 0000000..4dbdc9a --- /dev/null +++ b/src/ui/tmixpopup.h @@ -0,0 +1,42 @@ +#pragma once + +#include +#include + +class PulseModel; +class AudioDevice; +class DeviceWidget; +class TQVBoxLayout; +class TQPushButton; + +class TmixPopup : public TQWidget +{ + TQ_OBJECT + +public: + explicit TmixPopup( PulseModel *model, TQWidget *parent = 0 ); + + // Position relative to tray icon and show, or hide if already visible. + void toggleAt( const TQPoint &trayGlobalPos, const TQSize &traySize ); + + // True for ~300ms after hiding — prevents re-show on the same click. + bool justHidden() const; + +signals: + void showMixerRequested(); + +protected: + void hideEvent( TQHideEvent *e ); + void wheelEvent( TQWheelEvent *e ); + +private slots: + void onDefaultOutputChanged( AudioDevice *dev ); + +private: + void setDevice( AudioDevice *dev ); + + PulseModel *m_model; + DeviceWidget *m_devWidget; + TQVBoxLayout *m_layout; + TQTime m_hideTime; +}; -- cgit v1.2.3