/*************************************************************************** source::worx raDIYo Copyright © 2020-2022 c.holzheuer chris@sourceworx.org This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. ***************************************************************************/ #ifndef RADIYO_H #define RADIYO_H #include #include #include #include #include #include #include #include #include #include #include #include //#include #include #include #include /** @mainpage raDIYo @section sec1 raDIYo Eine Mediaplayer-Software für den RaspberryPi, zugleich ein Hardware-Updgrade eines Nora 'Rienzi' Radios, Bj. ca. 1935 @section sec3 Ideen & TODO: @subsection sec3_1 TODO 1.0.xx RC @remarks Für 1.0x - lib vlc player nehmen! - videos einbauen, fürs geschmäckle - artist anzeigen - progressbar anzeigen - volume % einblenden - Qt 6.x upgrade - Gestensteuerung via Ultraschall Sensor - Dazu Arduino Bindings - Config per App - Röhrenoszi als Pegel Anzeige ?? - mp3 taglib einsetzen - peak level halten im SpectroViewer - Player verbessern: Loop / Shuffle - Player verbessern: Lieblinslautstärke pro song speichern - Player verbessern: Liste weiterspielen @bug - Bluetooth-Einbindung läuft nur über Systemeinstellungen */ namespace raDIYo { // misc //#define raDIYo:Version "Version 0.0.01 / 19.12.2020" [[maybe_unused]] constexpr static const char* Version = "raDIYo 0.5.45 / 01.12.2022 © 2020-22 chris@sourceworx.org"; [[maybe_unused]] constexpr static const char* OrgName = "source::worx"; [[maybe_unused]] constexpr static const char* DomainName = "sourceworx.org"; [[maybe_unused]] constexpr static const char* AppName = "raDIYo"; } class SWDialHandler; class PiGRotaryDial; class SWControl; class SWPlayerControl; class SWSenderControl; class SWSongsControl; class SWAlarmControl; class SWUSBControl; /** * @brief The RaDIYo class: Erbt alles von RaDIYoWidget, * Dort wird das GUI implementiert, hier werden die * Zustandssteuerungen behandelt */ class RaDIYo : public QWidget, private Ui_RaDIYoWidget { Q_OBJECT public: constexpr static const int SWScreenSmallX = 480; constexpr static const int SWScreenSmallY = 320; constexpr static const int SWScreenLargeX = 800; constexpr static const int SWScreenLargeY = 480 - 40; typedef enum { Play = 0, Pause, Stop, Clock, Alarm, Sender, Songs, USB, Back, Shutdown, ControlsSize } ControlType; RaDIYo(); virtual ~RaDIYo(); public slots: void onChangeState( int id ); // dial handling: kommt von aussen void onLeftButtonClicked(); void onLeftDeltaChanged(int); void onRightButtonClicked(); void onRightDeltaChanged(int); public slots: void onPlayingChanged( QMediaPlayer::State state ); void onPlayCurrentUrl(); void onPlayUrl( SWUrl item ); protected: using SWControlMap = QMap; void onIdleTimeOut(); QString stateName( int state ); void showTitleText( bool pauseClicked ); void addControl( int id, SWControl* control ); void setupFonts(); void setupControls(); void setupConnections(); void setupDefaults(); SWDialHandler* _activeReceiver = nullptr; // das aktive Control, bzw. die Buttongroup int _curCtrlIdx = RaDIYo::Songs; // index des aktiven Controls bool _upMode = false; QMediaPlayer::State _playerState = QMediaPlayer::StoppedState; SWPlayerControl* _playerControl = nullptr; SWSenderControl* _senderControl = nullptr; SWSongsControl* _songsControl = nullptr; SWAlarmControl* _alarmControl = nullptr; SWUSBControl* _usbControl = nullptr; SWUrl _nowPlaying; QString _titleCss; QTimer _idleTimer; SWDummyDialDialog _dialDialog; // fake dials für windows PiGRotaryDial* _dialLeft = nullptr; // raspi rotary dials PiGRotaryDial* _dialRight = nullptr; QSettings _mainSettings; SWDialButtonGroup _raDIYoButtons; SWControlMap _controls; // alle Controls }; #endif // RADIYO_H