Rivendellaudio/lib/rdsound_panel.h
Fred Gleason 40e2081b7a 2020-05-12 Fred Gleason <fredg@paravelsystems.com>
* Fixed a regression that broke the ability to scroll through
	Sound Panel panels by means of the mouse wheel.

Signed-off-by: Fred Gleason <fredg@paravelsystems.com>
2020-05-12 12:51:12 -04:00

195 lines
6.5 KiB
C++

// rdsound_panel.h
//
// The sound panel widget
//
// (C) Copyright 2002-2019 Fred Gleason <fredg@paravelsystems.com>
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License version 2 as
// published by the Free Software Foundation.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public
// License along with this program; if not, write to the Free Software
// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
//
#ifndef RDSOUND_PANEL_H
#define RDSOUND_PANEL_H
#include <vector>
#include <qdatetime.h>
#include <qlabel.h>
#include <qsignalmapper.h>
#include <rdbutton_dialog.h>
#include <rdbutton_panel.h>
#include <rdcart.h>
#include <rdcart_dialog.h>
#include <rdcombobox.h>
#include <rdevent_player.h>
#include <rdpanel_button.h>
#include <rdpushbutton.h>
#include <rdwidget.h>
//
// Widget Settings
//
#define PANEL_BUTTON_SIZE_X 88
#define PANEL_BUTTON_SIZE_Y 80
#define PANEL_MAX_OUTPUTS 5
#define PANEL_SCAN_INTERVAL 10000
class RDSoundPanel : public RDWidget
{
Q_OBJECT
public:
RDSoundPanel(int cols,int rows,int station_panels,int user_panels,bool flash,
const QString &caption,const QString &label_template,
bool extended,RDEventPlayer *player,RDCartDialog *cart_dialog,
QWidget *parent=0);
~RDSoundPanel();
QSize sizeHint() const;
QSizePolicy sizePolicy() const;
int card(int outnum) const;
void setCard(int outnum,int card);
int port(int outnum) const;
void setPort(int outnum,int port);
QString outputText(int outnum) const;
void setOutputText(int outnum,const QString &text);
void setRmls(int outnum,const QString &start_rml,const QString &stop_rml);
void setLogName(const QString &logname);
void setSvcName(const QString &svcname);
void play(RDAirPlayConf::PanelType type,int panel,int row,int col,
RDLogLine::StartSource src,int mport=-1,bool pause_when_finished=false);
bool pause(RDAirPlayConf::PanelType type,int panel,int row,int col,int mport=-1);
void stop(RDAirPlayConf::PanelType type,int panel,int row,int col,
int mport=-1,bool pause_when_finished=false,int fade_out=0);
void channelStop(int mport);
void setText(RDAirPlayConf::PanelType type,int panel,int row,int col,
const QString &str);
void setColor(RDAirPlayConf::PanelType type,int panel,int row,int col,
const QColor &color);
void duckVolume(RDAirPlayConf::PanelType type,int panel,int row,int col,
int level,int fade,int mport=-1);
RDAirPlayConf::ActionMode actionMode() const;
void setActionMode(RDAirPlayConf::ActionMode mode);
bool pauseEnabled() const;
void setPauseEnabled(bool state);
int currentNumber() const;
RDAirPlayConf::PanelType currentType() const;
public slots:
void setButton(RDAirPlayConf::PanelType type,int panel,int row,int col,
unsigned cartnum,const QString &title="");
void acceptCartDrop(int row,int col,unsigned cartnum,const QColor &color,
const QString &);
void changeUser();
void tickClock();
void panelUp();
void panelDown();
signals:
void tick();
void buttonFlash(bool state);
void selectClicked(unsigned cartnum,int row,int col);
void channelStarted(int mport,int card,int port);
void channelStopped(int mport,int card,int port);
private slots:
void panelActivatedData(int n);
void playmodeActivatedData(int n);
void resetClickedData();
void allClickedData();
void setupClickedData();
void buttonMapperData(int id);
void stateChangedData(int id,RDPlayDeck::State state);
void hookEndData(int id);
void timescalingSupportedData(int card,bool state);
void panelSetupData();
void onairFlagChangedData(bool state);
void scanPanelData();
protected:
void wheelEvent(QWheelEvent *e);
private:
void PlayButton(RDAirPlayConf::PanelType type,int panel,int row,int col,
RDLogLine::StartSource src,bool hookmode,int mport=-1,
bool pause_when_finished=false);
bool PlayAudio(RDPanelButton *button,RDCart *cart,bool hookmode,int mport=-1);
void PlayMacro(RDPanelButton *button,RDCart *cart);
void PauseButton(RDAirPlayConf::PanelType type,int panel,int row,int col,int mport=-1);
void StopButton(RDAirPlayConf::PanelType type,int panel,int row,int col,
int mport=-1,bool pause_when_finished=false,int fade_out=0);
void StopButton(int id);
void StopButton(RDPlayDeck *deck);
void LoadPanels();
void LoadPanel(RDAirPlayConf::PanelType type,int panel);
void SaveButton(RDAirPlayConf::PanelType type,int panel,int row,int col);
int PanelOffset(RDAirPlayConf::PanelType type,int panel);
int GetFreeButtonDeck();
int GetFreeOutput();
void LogPlayEvent(unsigned cartnum,int cutnum);
void LogTraffic(RDPanelButton *button);
void LogTrafficMacro(RDPanelButton *button);
void LogLine(QString str);
void Playing(int id);
void Paused(int id);
void Stopped(int id);
void ClearChannel(int id);
void ClearReset();
QString PanelTag(int index);
QString PanelOwner(RDAirPlayConf::PanelType type);
std::vector<RDButtonPanel *> panel_buttons;
RDComboBox *panel_selector_box;
QComboBox *panel_playmode_box;
RDPushButton *panel_setup_button;
RDPushButton *panel_reset_button;
RDPushButton *panel_all_button;
RDAirPlayConf::PanelType panel_type;
RDButtonDialog *panel_button_dialog;
QSignalMapper *panel_mapper;
QString panel_tablename;
QString panel_name_tablename;
int panel_number;
int panel_station_panels;
int panel_user_panels;
QString panel_label_template;
bool panel_setup_mode;
bool panel_reset_mode;
QWidget *panel_parent;
int panel_card[PANEL_MAX_OUTPUTS];
int panel_port[PANEL_MAX_OUTPUTS];
int panel_cue_card;
int panel_cue_port;
QString panel_output_text[PANEL_MAX_OUTPUTS];
QString panel_start_rml[PANEL_MAX_OUTPUTS];
QString panel_stop_rml[PANEL_MAX_OUTPUTS];
RDPanelButton *panel_active_buttons[RD_MAX_STREAMS];
bool panel_flash;
int panel_flash_count;
bool panel_flash_state;
QString panel_logfile;
bool panel_timescaling_supported[PANEL_MAX_OUTPUTS];
bool panel_config_panels;
RDEventPlayer *panel_event_player;
QString panel_svcname;
RDAirPlayConf::ActionMode panel_action_mode;
bool panel_pause_enabled;
int panel_button_columns;
int panel_button_rows;
RDCartDialog *panel_cart_dialog;
bool panel_onair_flag;
QTimer *panel_scan_timer;
QString panel_caption;
};
#endif // RDSOUND_PANEL_H