mirror of
https://github.com/ElvishArtisan/rivendell.git
synced 2025-05-19 22:48:01 +02:00
* Tweaked the layout of the 'Log Length' readouts in the full log widget in rdairplay(1). Signed-off-by: Fred Gleason <fredg@paravelsystems.com>
1066 lines
28 KiB
C++
1066 lines
28 KiB
C++
// list_log.cpp
|
|
//
|
|
// The full log widget for RDAirPlay
|
|
//
|
|
// (C) Copyright 2002-2021 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.
|
|
//
|
|
|
|
#include <QHeaderView>
|
|
#include <QMessageBox>
|
|
#include <QPainter>
|
|
|
|
#include <rdapplication.h>
|
|
#include <rdconf.h>
|
|
|
|
#include "colors.h"
|
|
#include "list_log.h"
|
|
|
|
ListLog::ListLog(RDLogPlay *log,int id,bool allow_pause,
|
|
QWidget *parent)
|
|
: RDWidget(parent)
|
|
{
|
|
list_id=id;
|
|
list_log=log;
|
|
list_op_mode=RDAirPlayConf::LiveAssist;
|
|
list_action_mode=RDAirPlayConf::Normal;
|
|
list_scroll=true;
|
|
list_pause_allowed=allow_pause;
|
|
list_playbutton_mode=ListLog::ButtonDisabled;
|
|
list_audition_head_playing=false;
|
|
list_audition_tail_playing=false;
|
|
|
|
//
|
|
// Create Palettes
|
|
//
|
|
QColor system_button_text_color = palette().buttonText().color();
|
|
QColor system_button_color = palette().button().color();
|
|
QColor system_mid_color = palette().mid().color();
|
|
list_from_color=
|
|
QPalette(QColor(BUTTON_FROM_BACKGROUND_COLOR),QColor(system_mid_color));
|
|
list_from_color.
|
|
setColor(QPalette::ButtonText,QColor(BUTTON_FROM_TEXT_COLOR));
|
|
|
|
list_to_color=
|
|
QPalette(QColor(BUTTON_TO_BACKGROUND_COLOR),QColor(system_mid_color));
|
|
list_to_color.
|
|
setColor(QPalette::ButtonText,QColor(BUTTON_TO_TEXT_COLOR));
|
|
list_list_to_color=palette();
|
|
list_list_to_color.setColor(QPalette::Active,QPalette::Highlight,
|
|
BUTTON_TO_BACKGROUND_COLOR);
|
|
list_list_to_color.setColor(QPalette::Active,QPalette::HighlightedText,
|
|
BUTTON_TO_TEXT_COLOR);
|
|
list_list_to_color.setColor(QPalette::Inactive,QPalette::Highlight,
|
|
BUTTON_TO_BACKGROUND_COLOR);
|
|
list_list_to_color.setColor(QPalette::Inactive,QPalette::HighlightedText,
|
|
BUTTON_TO_TEXT_COLOR);
|
|
list_list_from_color=palette();
|
|
list_list_from_color.setColor(QPalette::Active,QPalette::Highlight,
|
|
BUTTON_FROM_BACKGROUND_COLOR);
|
|
list_list_from_color.setColor(QPalette::Active,QPalette::HighlightedText,
|
|
BUTTON_FROM_TEXT_COLOR);
|
|
list_list_from_color.setColor(QPalette::Inactive,QPalette::Highlight,
|
|
BUTTON_FROM_BACKGROUND_COLOR);
|
|
list_list_from_color.
|
|
setColor(QPalette::Inactive,QPalette::HighlightedText,
|
|
BUTTON_FROM_TEXT_COLOR);
|
|
list_scroll_color[0]=palette();
|
|
list_scroll_color[0].setColor(QPalette::Active,QPalette::ButtonText,
|
|
BUTTON_LOG_ACTIVE_TEXT_COLOR);
|
|
list_scroll_color[0].setColor(QPalette::Active,QPalette::Button,
|
|
BUTTON_LOG_ACTIVE_BACKGROUND_COLOR);
|
|
list_scroll_color[0].setColor(QPalette::Active,QPalette::Background,
|
|
system_mid_color);
|
|
list_scroll_color[0].setColor(QPalette::Inactive,QPalette::ButtonText,
|
|
BUTTON_LOG_ACTIVE_TEXT_COLOR);
|
|
list_scroll_color[0].setColor(QPalette::Inactive,QPalette::Button,
|
|
BUTTON_LOG_ACTIVE_BACKGROUND_COLOR);
|
|
list_scroll_color[0].setColor(QPalette::Inactive,QPalette::Background,
|
|
system_mid_color);
|
|
list_scroll_color[1]=palette();
|
|
list_scroll_color[1].setColor(QPalette::Active,QPalette::ButtonText,
|
|
system_button_text_color);
|
|
list_scroll_color[1].setColor(QPalette::Active,QPalette::Button,
|
|
system_button_color);
|
|
list_scroll_color[1].setColor(QPalette::Active,QPalette::Background,
|
|
system_mid_color);
|
|
list_scroll_color[1].setColor(QPalette::Inactive,QPalette::ButtonText,
|
|
system_button_text_color);
|
|
list_scroll_color[1].setColor(QPalette::Inactive,QPalette::Button,
|
|
system_button_color);
|
|
list_scroll_color[1].setColor(QPalette::Inactive,QPalette::Background,
|
|
system_mid_color);
|
|
|
|
//
|
|
// Hour Selector
|
|
//
|
|
list_hour_selector=new HourSelector(this);
|
|
connect(list_hour_selector,SIGNAL(hourSelected(int)),
|
|
this,SLOT(selectHour(int)));
|
|
connect(list_log,SIGNAL(hourChanged(int,bool)),
|
|
list_hour_selector,SLOT(updateHour(int,bool)));
|
|
list_hour_selector->hide();
|
|
|
|
int y=0;
|
|
int h=sizeHint().height()-60;
|
|
if(rda->airplayConf()->showCounters()) {
|
|
h-=60;
|
|
}
|
|
if(rda->airplayConf()->hourSelectorEnabled()) {
|
|
y+=80;
|
|
h-=80;
|
|
list_hour_selector->show();
|
|
}
|
|
|
|
//
|
|
// Log View
|
|
//
|
|
list_log_view=new LogTableView(this);
|
|
list_log_view->setSelectionBehavior(QAbstractItemView::SelectRows);
|
|
list_log_view->setSelectionMode(QAbstractItemView::ContiguousSelection);
|
|
list_log_view->setShowGrid(false);
|
|
list_log_view->setSortingEnabled(false);
|
|
list_log_view->setWordWrap(false);
|
|
list_log->setFont(defaultFont());
|
|
list_log->setPalette(palette());
|
|
list_log_view->setModel(list_log);
|
|
list_log_view->horizontalHeader()->setSectionsMovable(true);
|
|
list_log_view->resizeColumnsToContents();
|
|
connect(list_log_view->selectionModel(),
|
|
SIGNAL(selectionChanged(const QItemSelection &,const QItemSelection &)),
|
|
this,
|
|
SLOT(selectionChangedData(const QItemSelection &,const QItemSelection)));
|
|
connect(list_log_view,SIGNAL(doubleClicked(const QModelIndex &)),
|
|
this,SLOT(doubleClickedData(const QModelIndex &)));
|
|
connect(list_log,SIGNAL(modelReset()),this,SLOT(modelResetData()));
|
|
connect(list_log_view,SIGNAL(cartDropped(int,RDLogLine *)),
|
|
this,SLOT(cartDroppedData(int,RDLogLine *)));
|
|
connect(rda->ripc(),SIGNAL(notificationReceived(RDNotification *)),
|
|
list_log,SLOT(processNotification(RDNotification *)));
|
|
|
|
//
|
|
// List Logs Dialog
|
|
//
|
|
list_logs_dialog=new ListLogs(list_log,this);
|
|
|
|
//
|
|
// Time Counter Section
|
|
//
|
|
list_groupbox=new QGroupBox(" "+tr("Run Length"),this);
|
|
list_groupbox->setFont(labelFont());
|
|
list_groupbox->setAlignment(Qt::AlignLeft|Qt::AlignBottom);
|
|
if(!rda->airplayConf()->showCounters()) {
|
|
list_groupbox->hide();
|
|
}
|
|
|
|
//
|
|
// Stop Time Counter
|
|
//
|
|
list_stoptime_edit=new QLineEdit(this);
|
|
list_stoptime_label=new QLabel(tr("Next Stop:"),this);
|
|
list_stoptime_label->setFont(labelFont());
|
|
list_stoptime_label->setAlignment(Qt::AlignRight|Qt::AlignVCenter);
|
|
// list_stoptime_label->setBackgroundColor(QColor(system_mid_color));
|
|
if(!rda->airplayConf()->showCounters()) {
|
|
list_stoptime_edit->hide();
|
|
list_stoptime_label->hide();
|
|
}
|
|
|
|
//
|
|
// End Time Counter
|
|
//
|
|
list_endtime_edit=new QLineEdit(this);
|
|
list_endtime_label=new QLabel(tr("Log End:"),this);
|
|
list_endtime_label->setFont(labelFont());
|
|
list_endtime_label->setAlignment(Qt::AlignRight|Qt::AlignVCenter);
|
|
// list_endtime_label->setBackgroundColor(QColor(system_mid_color));
|
|
if(!rda->airplayConf()->showCounters()) {
|
|
list_endtime_edit->hide();
|
|
list_endtime_label->hide();
|
|
}
|
|
|
|
//
|
|
// Select Button
|
|
//
|
|
list_take_button=new QPushButton(this);
|
|
list_take_button->setFont(bigButtonFont());
|
|
list_take_button->
|
|
setPalette(QPalette(QColor(system_button_color),QColor(system_mid_color)));
|
|
list_take_button->setText(tr("Select"));
|
|
list_take_button->setFocusPolicy(Qt::NoFocus);
|
|
connect(list_take_button,SIGNAL(clicked()),this,SLOT(takeButtonData()));
|
|
list_take_button->hide();
|
|
|
|
//
|
|
// Audition Head Button
|
|
//
|
|
list_head_button=new QPushButton(this);
|
|
list_head_button->setFont(bigButtonFont());
|
|
list_head_button->
|
|
setPalette(QPalette(QColor(system_button_color),QColor(system_mid_color)));
|
|
list_head_button->setText(tr("Audition\nHead"));
|
|
list_head_button->setFocusPolicy(Qt::NoFocus);
|
|
connect(list_head_button,SIGNAL(clicked()),this,SLOT(headButtonData()));
|
|
if(!rda->airplayConf()->showCounters()) {
|
|
list_head_button->hide();
|
|
}
|
|
|
|
//
|
|
// Audition Tail Button
|
|
//
|
|
list_tail_button=new QPushButton(this);
|
|
list_tail_button->setFont(bigButtonFont());
|
|
list_tail_button->
|
|
setPalette(QPalette(QColor(system_button_color),QColor(system_mid_color)));
|
|
list_tail_button->setText(tr("Audition\nTail"));
|
|
list_tail_button->setFocusPolicy(Qt::NoFocus);
|
|
connect(list_tail_button,SIGNAL(clicked()),this,SLOT(tailButtonData()));
|
|
if(!rda->airplayConf()->showCounters()) {
|
|
list_tail_button->hide();
|
|
}
|
|
|
|
//
|
|
// Play Button
|
|
//
|
|
list_play_button=new QPushButton(this);
|
|
list_play_button->setFont(bigButtonFont());
|
|
list_play_button->
|
|
setPalette(QPalette(QColor(system_button_color),QColor(system_mid_color)));
|
|
list_play_button->setText(tr("Start"));
|
|
list_play_button->setDisabled(true);
|
|
list_play_button->setFocusPolicy(Qt::NoFocus);
|
|
connect(list_play_button,SIGNAL(clicked()),this,SLOT(playButtonData()));
|
|
|
|
//
|
|
// Next Button
|
|
//
|
|
list_next_button=new QPushButton(this);
|
|
list_next_button->setFont(bigButtonFont());
|
|
list_next_button->
|
|
setPalette(QPalette(QColor(system_button_color),QColor(system_mid_color)));
|
|
list_next_button->setText(tr("Make\nNext"));
|
|
list_next_button->setDisabled(true);
|
|
list_next_button->setFocusPolicy(Qt::NoFocus);
|
|
connect(list_next_button,SIGNAL(clicked()),this,SLOT(nextButtonData()));
|
|
|
|
//
|
|
// Modify Button
|
|
//
|
|
list_modify_button=new QPushButton(this);
|
|
list_modify_button->setFont(bigButtonFont());
|
|
list_modify_button->
|
|
setPalette(QPalette(QColor(system_button_color),QColor(system_mid_color)));
|
|
list_modify_button->setText(tr("Modify"));
|
|
list_modify_button->setDisabled(true);
|
|
list_modify_button->setFocusPolicy(Qt::NoFocus);
|
|
connect(list_modify_button,SIGNAL(clicked()),this,SLOT(modifyButtonData()));
|
|
|
|
//
|
|
// Scroll Button
|
|
//
|
|
list_scroll_button=new QPushButton(this);
|
|
list_scroll_button->setFont(bigButtonFont());
|
|
list_scroll_button->
|
|
setPalette(QPalette(QColor(system_button_color),QColor(system_mid_color)));
|
|
list_scroll_button->setText(tr("Scroll"));
|
|
list_scroll_button->setFocusPolicy(Qt::NoFocus);
|
|
connect(list_scroll_button,SIGNAL(clicked()),this,SLOT(scrollButtonData()));
|
|
list_scroll_button->setPalette(list_scroll_color[0]);
|
|
|
|
//
|
|
// Refresh Button
|
|
//
|
|
list_refresh_button=new QPushButton(this);
|
|
list_refresh_button->setFont(bigButtonFont());
|
|
list_refresh_button->
|
|
setPalette(QPalette(QColor(system_button_color),QColor(system_mid_color)));
|
|
list_refresh_button->setText(tr("Refresh\nLog"));
|
|
list_refresh_button->setDisabled(true);
|
|
list_refresh_button->setFocusPolicy(Qt::NoFocus);
|
|
connect(list_refresh_button,SIGNAL(clicked()),
|
|
this,SLOT(refreshButtonData()));
|
|
|
|
//
|
|
// Log Load
|
|
//
|
|
list_load_button=new QPushButton(this);
|
|
list_load_button->setFont(bigButtonFont());
|
|
list_load_button->
|
|
setPalette(QPalette(QColor(system_button_color),QColor(system_mid_color)));
|
|
list_load_button->setText(tr("Select\nLog"));
|
|
list_load_button->setFocusPolicy(Qt::NoFocus);
|
|
connect(list_load_button,SIGNAL(clicked()),this,SLOT(loadButtonData()));
|
|
|
|
//
|
|
// Edit Event Dialog
|
|
//
|
|
list_event_edit=new EditEvent(list_log,this);
|
|
|
|
//
|
|
// Map Slots
|
|
//
|
|
connect(list_log,SIGNAL(transportChanged()),
|
|
this,SLOT(transportChangedData()));
|
|
connect(list_log,SIGNAL(refreshabilityChanged(bool)),
|
|
this,SLOT(refreshabilityChangedData(bool)));
|
|
connect(list_log,SIGNAL(auditionHeadPlayed(int)),
|
|
this,SLOT(auditionHeadData(int)));
|
|
connect(list_log,SIGNAL(auditionTailPlayed(int)),
|
|
this,SLOT(auditionTailData(int)));
|
|
connect(list_log,SIGNAL(auditionStopped(int)),
|
|
this,SLOT(auditionStoppedData(int)));
|
|
}
|
|
|
|
|
|
QSize ListLog::sizeHint() const
|
|
{
|
|
return QSize(500,530);
|
|
}
|
|
|
|
|
|
QSizePolicy ListLog::sizePolicy() const
|
|
{
|
|
return QSizePolicy(QSizePolicy::Fixed,QSizePolicy::Fixed);
|
|
}
|
|
|
|
|
|
void ListLog::setOpMode(RDAirPlayConf::OpMode mode)
|
|
{
|
|
if(mode==list_op_mode) {
|
|
return;
|
|
}
|
|
list_op_mode=mode;
|
|
}
|
|
|
|
|
|
RDAirPlayConf::ActionMode ListLog::actionMode() const
|
|
{
|
|
return list_action_mode;
|
|
}
|
|
|
|
|
|
void ListLog::setActionMode(RDAirPlayConf::ActionMode mode,int *cartnum)
|
|
{
|
|
list_cart=cartnum;
|
|
|
|
if(mode==list_action_mode) {
|
|
return;
|
|
}
|
|
switch(mode) {
|
|
case RDAirPlayConf::Normal:
|
|
list_log_view->setSelectionMode(QAbstractItemView::ContiguousSelection);
|
|
list_log_view->setPalette(palette());
|
|
list_take_button->hide();
|
|
list_play_button->show();
|
|
list_next_button->show();
|
|
list_modify_button->show();
|
|
list_scroll_button->show();
|
|
list_refresh_button->show();
|
|
list_load_button->show();
|
|
break;
|
|
|
|
case RDAirPlayConf::AddTo:
|
|
list_log_view->setSelectionMode(QAbstractItemView::SingleSelection);
|
|
list_log_view->setPalette(list_list_to_color);
|
|
list_take_button->setText(ADD_TO_MODE_TITLE);
|
|
list_take_button->setPalette(list_to_color);
|
|
list_take_button->show();
|
|
list_play_button->hide();
|
|
list_next_button->hide();
|
|
list_modify_button->hide();
|
|
list_scroll_button->hide();
|
|
list_refresh_button->hide();
|
|
list_load_button->hide();
|
|
break;
|
|
|
|
case RDAirPlayConf::DeleteFrom:
|
|
list_log_view->setSelectionMode(QAbstractItemView::SingleSelection);
|
|
list_log_view->setPalette(list_list_from_color);
|
|
list_take_button->setText(DELETE_FROM_MODE_TITLE);
|
|
list_take_button->setPalette(list_from_color);
|
|
list_take_button->show();
|
|
list_play_button->hide();
|
|
list_next_button->hide();
|
|
list_modify_button->hide();
|
|
list_scroll_button->hide();
|
|
list_refresh_button->hide();
|
|
list_load_button->hide();
|
|
break;
|
|
|
|
case RDAirPlayConf::MoveFrom:
|
|
list_log_view->setSelectionMode(QAbstractItemView::SingleSelection);
|
|
list_log_view->setPalette(list_list_from_color);
|
|
list_take_button->setText(MOVE_FROM_MODE_TITLE);
|
|
list_take_button->setPalette(list_from_color);
|
|
list_take_button->show();
|
|
list_play_button->hide();
|
|
list_next_button->hide();
|
|
list_modify_button->hide();
|
|
list_scroll_button->hide();
|
|
list_refresh_button->hide();
|
|
list_load_button->hide();
|
|
break;
|
|
|
|
case RDAirPlayConf::MoveTo:
|
|
list_log_view->setSelectionMode(QAbstractItemView::SingleSelection);
|
|
list_log_view->setPalette(list_list_to_color);
|
|
list_take_button->setText(MOVE_TO_MODE_TITLE);
|
|
list_take_button->setPalette(list_to_color);
|
|
list_take_button->show();
|
|
list_play_button->hide();
|
|
list_next_button->hide();
|
|
list_modify_button->hide();
|
|
list_scroll_button->hide();
|
|
list_refresh_button->hide();
|
|
list_load_button->hide();
|
|
break;
|
|
|
|
case RDAirPlayConf::CopyFrom:
|
|
list_log_view->setSelectionMode(QAbstractItemView::SingleSelection);
|
|
list_log_view->setPalette(list_list_from_color);
|
|
list_take_button->setText(COPY_FROM_MODE_TITLE);
|
|
list_take_button->setPalette(list_from_color);
|
|
list_take_button->show();
|
|
list_play_button->hide();
|
|
list_next_button->hide();
|
|
list_modify_button->hide();
|
|
list_scroll_button->hide();
|
|
list_refresh_button->hide();
|
|
list_load_button->hide();
|
|
break;
|
|
|
|
case RDAirPlayConf::CopyTo:
|
|
list_log_view->setSelectionMode(QAbstractItemView::SingleSelection);
|
|
list_log_view->setPalette(list_list_to_color);
|
|
list_take_button->setText(COPY_TO_MODE_TITLE);
|
|
list_take_button->setPalette(list_to_color);
|
|
list_take_button->show();
|
|
list_play_button->hide();
|
|
list_next_button->hide();
|
|
list_modify_button->hide();
|
|
list_scroll_button->hide();
|
|
list_refresh_button->hide();
|
|
list_load_button->hide();
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
if(mode==RDAirPlayConf::Normal) {
|
|
list_scroll=list_suspended_scroll;
|
|
}
|
|
else {
|
|
if(list_action_mode==RDAirPlayConf::Normal) {
|
|
list_suspended_scroll=list_scroll;
|
|
list_scroll=false;
|
|
}
|
|
}
|
|
list_action_mode=mode;
|
|
}
|
|
|
|
|
|
void ListLog::userChanged(bool add_allowed,bool delete_allowed,
|
|
bool arrange_allowed,bool playout_allowed)
|
|
{
|
|
list_load_button->setEnabled(playout_allowed);
|
|
}
|
|
|
|
|
|
void ListLog::selectHour(int hour)
|
|
{
|
|
int row=list_log->startOfHour(hour);
|
|
if(row>=0) {
|
|
list_log_view->selectRow(row);
|
|
}
|
|
}
|
|
|
|
|
|
void ListLog::takeButtonData()
|
|
{
|
|
int line=0;
|
|
|
|
RDLogLine::Status status=CurrentStatus();
|
|
switch(list_action_mode) {
|
|
case RDAirPlayConf::AddTo:
|
|
case RDAirPlayConf::MoveTo:
|
|
case RDAirPlayConf::CopyTo:
|
|
switch(status) {
|
|
case RDLogLine::Finished:
|
|
case RDLogLine::Playing:
|
|
case RDLogLine::Paused:
|
|
case RDLogLine::Finishing:
|
|
return;
|
|
|
|
default:
|
|
line=CurrentLine();
|
|
break;
|
|
}
|
|
break;
|
|
|
|
case RDAirPlayConf::CopyFrom:
|
|
line=CurrentLine();
|
|
if(list_log->logLine(line)!=NULL) {
|
|
switch(list_log->logLine(line)->type()) {
|
|
case RDLogLine::Marker:
|
|
case RDLogLine::OpenBracket:
|
|
case RDLogLine::CloseBracket:
|
|
case RDLogLine::Chain:
|
|
case RDLogLine::Track:
|
|
case RDLogLine::MusicLink:
|
|
case RDLogLine::TrafficLink:
|
|
case RDLogLine::UnknownType:
|
|
return;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
break;
|
|
|
|
case RDAirPlayConf::MoveFrom:
|
|
switch(status) {
|
|
case RDLogLine::Finished:
|
|
case RDLogLine::Playing:
|
|
case RDLogLine::Paused:
|
|
case RDLogLine::Finishing:
|
|
return;
|
|
|
|
default:
|
|
line=CurrentLine();
|
|
break;
|
|
}
|
|
break;
|
|
|
|
case RDAirPlayConf::DeleteFrom:
|
|
switch(status) {
|
|
case RDLogLine::Finished:
|
|
case RDLogLine::Playing:
|
|
case RDLogLine::Finishing:
|
|
return;
|
|
|
|
default:
|
|
line=CurrentLine();
|
|
// Don't try delete "end of log" or other invalid log entries.
|
|
if (line<0) {
|
|
return;
|
|
}
|
|
break;
|
|
}
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
|
|
emit selectClicked(list_id,line,status);
|
|
}
|
|
|
|
|
|
void ListLog::headButtonData()
|
|
{
|
|
if(list_audition_head_playing) {
|
|
list_log->auditionStop();
|
|
}
|
|
else {
|
|
if(!list_audition_tail_playing) {
|
|
list_log->auditionHead(CurrentLine());
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
void ListLog::tailButtonData()
|
|
{
|
|
if(list_audition_tail_playing) {
|
|
list_log->auditionStop();
|
|
}
|
|
else {
|
|
if(!list_audition_head_playing) {
|
|
list_log->auditionTail(CurrentLine());
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
void ListLog::auditionHeadData(int line)
|
|
{
|
|
list_head_button->setPalette(list_scroll_color[0]);
|
|
list_audition_head_playing=true;
|
|
}
|
|
|
|
|
|
void ListLog::auditionTailData(int line)
|
|
{
|
|
list_tail_button->setPalette(list_scroll_color[0]);
|
|
list_audition_tail_playing=true;
|
|
}
|
|
|
|
|
|
void ListLog::auditionStoppedData(int line)
|
|
{
|
|
list_head_button->setPalette(list_scroll_color[1]);
|
|
list_tail_button->setPalette(list_scroll_color[1]);
|
|
list_audition_head_playing=false;
|
|
list_audition_tail_playing=false;
|
|
}
|
|
|
|
|
|
void ListLog::playButtonData()
|
|
{
|
|
int line=CurrentLine();
|
|
if(line<0) {
|
|
return;
|
|
}
|
|
|
|
switch(list_playbutton_mode) {
|
|
case ListLog::ButtonPlay:
|
|
switch(CurrentStatus()) {
|
|
case RDLogLine::Scheduled:
|
|
case RDLogLine::Paused:
|
|
if(line<0) {
|
|
return;
|
|
}
|
|
list_log->play(line,RDLogLine::StartManual);
|
|
ClearSelection();
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
break;
|
|
|
|
case ListLog::ButtonStop:
|
|
if(list_pause_allowed) {
|
|
list_log->pause(line);
|
|
}
|
|
else {
|
|
list_log->stop(line);
|
|
}
|
|
ClearSelection();
|
|
break;
|
|
|
|
case ListLog::ButtonDisabled:
|
|
break;
|
|
}
|
|
}
|
|
|
|
|
|
void ListLog::modifyButtonData()
|
|
{
|
|
QModelIndexList rows=list_log_view->selectionModel()->selectedRows();
|
|
|
|
if(rows.size()==0) {
|
|
return;
|
|
}
|
|
if(rows.size()==1) {
|
|
RDLogLine *ll=list_log->logLine(rows.first().row());
|
|
if(ll!=NULL) {
|
|
if((ll->status()!=RDLogLine::Scheduled)&&
|
|
(ll->status()!=RDLogLine::Paused)&&
|
|
(ll->state()!=RDLogLine::NoCart)&&
|
|
(ll->state()!=RDLogLine::NoCut)) {
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
if(list_event_edit->exec(rows.first().row())==0) {
|
|
list_log->lineModified(rows.first().row());
|
|
}
|
|
if(rows.first().row()==1) {
|
|
return;
|
|
}
|
|
ClearSelection();
|
|
}
|
|
|
|
|
|
void ListLog::doubleClickedData(const QModelIndex &index)
|
|
{
|
|
modifyButtonData();
|
|
}
|
|
|
|
|
|
void ListLog::scrollButtonData()
|
|
{
|
|
if(list_scroll) {
|
|
list_scroll_button->setPalette(list_scroll_color[1]);
|
|
list_scroll=false;
|
|
}
|
|
else {
|
|
list_scroll_button->setPalette(list_scroll_color[0]);
|
|
list_scroll=true;
|
|
ScrollTo(list_log->nextLine());
|
|
}
|
|
}
|
|
|
|
|
|
void ListLog::refreshButtonData()
|
|
{
|
|
list_log->refresh();
|
|
}
|
|
|
|
|
|
void ListLog::nextButtonData()
|
|
{
|
|
RDLogLine *ll=NULL;
|
|
QModelIndexList rows=list_log_view->selectionModel()->selectedRows();
|
|
|
|
if(rows.size()==1) {
|
|
if((ll=list_log->logLine(rows.first().row()))!=NULL) {
|
|
if(ll->status()==RDLogLine::Scheduled) {
|
|
list_log->makeNext(rows.first().row());
|
|
ClearSelection();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
void ListLog::loadButtonData()
|
|
{
|
|
QString name=list_log->logName();
|
|
QString svcname=list_log->serviceName();
|
|
QString err_msg;
|
|
RDLog *edit_log;
|
|
RDLogLock *log_lock=NULL;
|
|
|
|
switch((ListLogs::Operation)list_logs_dialog->exec(&name,&svcname,&log_lock)) {
|
|
case ListLogs::Load:
|
|
list_log->setLogName(name);
|
|
list_log->load();
|
|
break;
|
|
|
|
case ListLogs::Save:
|
|
list_log->save();
|
|
edit_log=
|
|
new RDLog(list_log->logName().left(list_log->logName().length()-4));
|
|
delete edit_log;
|
|
break;
|
|
|
|
case ListLogs::SaveAs:
|
|
if(!RDLog::create(name,svcname,QDate(),rda->ripc()->user(),&err_msg,
|
|
rda->config())) {
|
|
QMessageBox::warning(this,"RDAirPlay - "+tr("Error"),err_msg);
|
|
return;
|
|
}
|
|
list_log->setServiceName(svcname);
|
|
list_log->setLogName(name);
|
|
list_log->save();
|
|
break;
|
|
|
|
case ListLogs::Unload:
|
|
list_log->clear();
|
|
break;
|
|
|
|
case ListLogs::Cancel:
|
|
break;
|
|
}
|
|
if(log_lock!=NULL) {
|
|
delete log_lock;
|
|
}
|
|
}
|
|
|
|
|
|
void ListLog::selectionChangedData(const QItemSelection &new_sel,
|
|
const QItemSelection &old_sel)
|
|
{
|
|
QModelIndexList rows=list_log_view->selectionModel()->selectedRows();
|
|
|
|
if(rows.size()!=1) {
|
|
list_endtime_edit->setText("");
|
|
list_stoptime_label->setText(tr("Selected:"));
|
|
SetPlaybuttonMode(ListLog::ButtonDisabled);
|
|
list_modify_button->setDisabled(true);
|
|
list_next_button->setDisabled(true);
|
|
if(rows.size()>0) {
|
|
int last_line=rows.last().row();
|
|
if(last_line>=list_log->lineCount()) {
|
|
last_line=list_log->lineCount()-1;
|
|
}
|
|
list_stoptime_edit->
|
|
setText(RDGetTimeLength(list_log->
|
|
length(rows.first().row(),last_line+1),
|
|
true,false));
|
|
}
|
|
return;
|
|
}
|
|
switch(CurrentStatus()) {
|
|
case RDLogLine::Scheduled:
|
|
case RDLogLine::Paused:
|
|
if(rows.first().row()>=list_log->lineCount()) { //End marker!
|
|
SetPlaybuttonMode(ListLog::ButtonDisabled);
|
|
list_modify_button->setDisabled(true);
|
|
list_next_button->setDisabled(true);
|
|
}
|
|
else {
|
|
SetPlaybuttonMode(ListLog::ButtonPlay);
|
|
list_modify_button->setEnabled(true);
|
|
list_next_button->setEnabled(true);
|
|
}
|
|
break;
|
|
|
|
case RDLogLine::Playing:
|
|
SetPlaybuttonMode(ListLog::ButtonStop);
|
|
list_modify_button->setEnabled(true);
|
|
list_next_button->setDisabled(true);
|
|
break;
|
|
|
|
case RDLogLine::Finished:
|
|
SetPlaybuttonMode(ListLog::ButtonDisabled);
|
|
list_modify_button->setDisabled(true);
|
|
list_next_button->setDisabled(true);
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
if((rows.size()==1)&&(rows.first().row()<list_log->lineCount())) {
|
|
list_endtime_edit->
|
|
setText(RDGetTimeLength(list_log->
|
|
length(rows.last().row(),list_log->lineCount()),true,false));
|
|
list_stoptime_label->setText(tr("Next Stop:"));
|
|
int stoplen=list_log->lengthToStop(rows.last().row());
|
|
if(stoplen>=0) {
|
|
list_stoptime_edit->setText(RDGetTimeLength(stoplen,true,false));
|
|
}
|
|
else {
|
|
list_stoptime_edit->setText("");
|
|
}
|
|
}
|
|
else {
|
|
list_endtime_edit->setText("");
|
|
list_stoptime_edit->setText("");
|
|
}
|
|
}
|
|
|
|
|
|
void ListLog::transportChangedData()
|
|
{
|
|
int transport_line[TRANSPORT_QUANTITY];
|
|
|
|
list_log->transportEvents(transport_line);
|
|
if(list_scroll&&(transport_line[0]>=0)) {
|
|
ScrollTo(transport_line[0]);
|
|
}
|
|
}
|
|
|
|
|
|
void ListLog::modelResetData()
|
|
{
|
|
list_log_view->resizeColumnsToContents();
|
|
}
|
|
|
|
|
|
void ListLog::refreshabilityChangedData(bool state)
|
|
{
|
|
list_refresh_button->setEnabled(state);
|
|
}
|
|
|
|
|
|
void ListLog::cartDroppedData(int line,RDLogLine *ll)
|
|
{
|
|
emit cartDropped(list_id,line,ll);
|
|
}
|
|
|
|
|
|
void ListLog::resizeEvent(QResizeEvent *e)
|
|
{
|
|
//
|
|
// Hour Selector
|
|
//
|
|
if(rda->airplayConf()->hourSelectorEnabled()) {
|
|
list_hour_selector->setGeometry(5,5,size().width()-10,82);
|
|
}
|
|
|
|
//
|
|
// Log Items
|
|
//
|
|
int list_y=2;
|
|
int list_h=size().height()-63;
|
|
if(rda->airplayConf()->showCounters()) {
|
|
list_h-=60;
|
|
}
|
|
|
|
if(size().width()>=850) {
|
|
//
|
|
// Audition Head/Tail Buttons
|
|
//
|
|
list_head_button->setGeometry(5+510,size().height()-55,90,50);
|
|
list_tail_button->setGeometry(5+600,size().height()-55,90,50);
|
|
|
|
//
|
|
// Counters
|
|
//
|
|
// list_groupbox->setGeometry(5+695,size().height()-61,153,58);
|
|
list_groupbox->setGeometry(700,size().height()-64,153,62);
|
|
list_stoptime_edit->setGeometry(778,size().height()-43,70,18);
|
|
list_stoptime_label->setGeometry(708,size().height()-43,65,18);
|
|
list_endtime_edit->setGeometry(778,size().height()-23,70,18);
|
|
list_endtime_label->setGeometry(708,size().height()-23,65,18);
|
|
|
|
//
|
|
// Bottom Buttons
|
|
//
|
|
list_take_button->setGeometry(5+10,size().height()-55,80,50);
|
|
list_play_button->setGeometry(5+10,size().height()-55,80,50);
|
|
list_next_button->setGeometry(5+90,size().height()-55,80,50);
|
|
list_modify_button->setGeometry(5+170,size().height()-55,80,50);
|
|
list_scroll_button->setGeometry(5+250,size().height()-55,80,50);
|
|
list_refresh_button->setGeometry(5+330,size().height()-55,80,50);
|
|
list_load_button->setGeometry(5+410,size().height()-55,
|
|
80,50);
|
|
list_h+=60;
|
|
}
|
|
else {
|
|
//
|
|
// Audition Head/Tail Buttons
|
|
//
|
|
list_head_button->setGeometry(5+10,size().height()-113,90,50);
|
|
list_tail_button->setGeometry(5+100,size().height()-113,90,50);
|
|
|
|
//
|
|
// Counters
|
|
//
|
|
list_groupbox->setGeometry(343+1,size().height()-118,158,62);
|
|
list_stoptime_edit->setGeometry(417+1,size().height()-96,70,18);
|
|
list_stoptime_label->setGeometry(347+1,size().height()-96,65,18);
|
|
list_endtime_edit->setGeometry(417+1,size().height()-76,70,18);
|
|
list_endtime_label->setGeometry(347+1,size().height()-76,65,18);
|
|
|
|
//
|
|
// Bottom Buttons
|
|
//
|
|
list_take_button->setGeometry(5+10,size().height()-55,80,50);
|
|
list_play_button->setGeometry(5+10,size().height()-55,80,50);
|
|
list_next_button->setGeometry(5+90,size().height()-55,80,50);
|
|
list_modify_button->setGeometry(5+170,size().height()-55,80,50);
|
|
list_scroll_button->setGeometry(5+250,size().height()-55,80,50);
|
|
list_refresh_button->setGeometry(5+330,size().height()-55,80,50);
|
|
list_load_button->setGeometry(5+410,size().height()-55,80,50);
|
|
|
|
list_h+=4;
|
|
}
|
|
|
|
if(rda->airplayConf()->hourSelectorEnabled()) {
|
|
if(size().width()>=(24*HOURSELECTOR_BUTTON_EDGE)) {
|
|
list_y+=HOURSELECTOR_BUTTON_EDGE;
|
|
list_h-=HOURSELECTOR_BUTTON_EDGE;
|
|
}
|
|
else {
|
|
list_y+=(2*HOURSELECTOR_BUTTON_EDGE);
|
|
list_h-=(2*HOURSELECTOR_BUTTON_EDGE);
|
|
}
|
|
}
|
|
list_log_view->setGeometry(5+0,5+list_y,size().width()-10,list_h-5);
|
|
}
|
|
|
|
|
|
void ListLog::paintEvent(QPaintEvent *e)
|
|
{
|
|
QPainter *p=new QPainter(this);
|
|
p->fillRect(0,0,size().width(),size().height(),
|
|
QColor(AIR_WIDGET_BACKGROUND_COLOR));
|
|
delete p;
|
|
}
|
|
|
|
|
|
int ListLog::CurrentLine()
|
|
{
|
|
QModelIndexList rows=list_log_view->selectionModel()->selectedRows();
|
|
|
|
if(rows.size()==1) {
|
|
return rows.first().row();
|
|
}
|
|
|
|
return -1;
|
|
}
|
|
|
|
|
|
RDLogLine::Status ListLog::CurrentStatus()
|
|
{
|
|
QModelIndexList rows=list_log_view->selectionModel()->selectedRows();
|
|
|
|
if(rows.size()==1) {
|
|
RDLogLine *ll=list_log->logLine(rows.first().row());
|
|
if(ll==NULL) {
|
|
return RDLogLine::Scheduled;
|
|
}
|
|
else {
|
|
return ll->status();
|
|
}
|
|
}
|
|
return RDLogLine::Finished;
|
|
}
|
|
|
|
|
|
RDLogLine::State ListLog::CurrentState()
|
|
{
|
|
QModelIndexList rows=list_log_view->selectionModel()->selectedRows();
|
|
|
|
if(rows.size()==1) {
|
|
RDLogLine *ll=list_log->logLine(rows.first().row());
|
|
if(ll!=NULL) {
|
|
return ll->state();
|
|
}
|
|
}
|
|
return RDLogLine::NoCart;
|
|
}
|
|
|
|
|
|
void ListLog::ClearSelection()
|
|
{
|
|
list_log_view->clearSelection();
|
|
SetPlaybuttonMode(ListLog::ButtonDisabled);
|
|
list_modify_button->setDisabled(true);
|
|
list_next_button->setDisabled(true);
|
|
}
|
|
|
|
|
|
void ListLog::ScrollTo(int line)
|
|
{
|
|
list_log_view->
|
|
scrollTo(list_log->index(line,0),QAbstractItemView::PositionAtCenter);
|
|
list_log_view->clearSelection();
|
|
}
|
|
|
|
|
|
void ListLog::SetPlaybuttonMode(ListLog::PlayButtonMode mode)
|
|
{
|
|
if(mode==list_playbutton_mode) {
|
|
return;
|
|
}
|
|
switch(mode) {
|
|
case ListLog::ButtonPlay:
|
|
list_play_button->setEnabled(true);
|
|
list_play_button->setText(tr("Start"));
|
|
break;
|
|
|
|
case ListLog::ButtonStop:
|
|
list_play_button->setEnabled(true);
|
|
if(list_pause_allowed) {
|
|
list_play_button->setText(tr("Pause"));
|
|
}
|
|
else {
|
|
list_play_button->setText(tr("Stop"));
|
|
}
|
|
break;
|
|
|
|
case ListLog::ButtonDisabled:
|
|
list_play_button->setDisabled(true);
|
|
list_play_button->setText(tr("Start"));
|
|
break;
|
|
}
|
|
list_playbutton_mode=mode;
|
|
}
|