Rivendellaudio/rdairplay/messagewidget.cpp
Fred Gleason 162aa3e483 2025-04-28 Fred Gleason <fredg@paravelsystems.com>
* Upgrade Qt dependency from Qt5 to Qt6.

Signed-off-by: Fred Gleason <fredg@paravelsystems.com>
2025-04-28 09:20:03 -04:00

181 lines
4.4 KiB
C++

// messagewidget.cpp
//
// Message Widget for RDAirPlay Rivendell
//
// (C) Copyright 2024-2025 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 <QEvent>
#include <QKeyEvent>
//#include <QWebFrame>
#include <rdapplication.h>
#include <rdeventfilter.h>
#include "colors.h"
#include "messagewidget.h"
MessageWidget::MessageWidget(QWidget *parent)
: QWidget(parent)
{
setStyleSheet("background-color: "+
QColor(LOGLINEBOX_BACKGROUND_COLOR).name());
//
// Generate Fonts
//
for(unsigned i=0;i<MESSAGE_FONT_QUANTITY;i++) {
d_message_fonts[i]=QFont(font().family(),12+2*i,QFont::Normal);
d_message_fonts[i].setPixelSize(12+2*i);
d_message_metrics[i]=new QFontMetrics(d_message_fonts[i]);
}
//
// Message Display
//
d_label=new QLabel(this);
d_label->setWordWrap(true);
d_label->setAlignment(Qt::AlignCenter);
/*
d_view=new QWebView(this);
connect(d_view,SIGNAL(loadFinished(bool)),
this,SLOT(webLoadFinishedData(bool)));
d_view->hide();
RDEventFilter *filter=new RDEventFilter(this);
filter->addFilter(QEvent::Enter);
filter->addFilter(QEvent::Leave);
filter->addFilter(QEvent::KeyPress);
filter->addFilter(QEvent::KeyRelease);
filter->addFilter(QEvent::MouseButtonPress);
filter->addFilter(QEvent::MouseButtonRelease);
filter->addFilter(QEvent::MouseButtonDblClick);
filter->addFilter(QEvent::MouseMove);
filter->addFilter(QEvent::Wheel);
d_view->installEventFilter(filter);
*/
//
// Refresh Timer
//
d_refresh_timer=new QTimer(this);
d_refresh_timer->setSingleShot(true);
connect(d_refresh_timer,SIGNAL(timeout()),this,SLOT(refreshData()));
//
// Load Current Page
//
QString url=rda->airplayConf()->messageWidgetUrl();
if(!url.isEmpty()) {
setUrl(url);
}
}
void MessageWidget::setText(const QString &str,const QColor &col)
{
QPalette pal=d_label->palette();
pal.setColor(QPalette::Active,QPalette::WindowText,col);
pal.setColor(QPalette::Inactive,QPalette::WindowText,col);
d_label->setPalette(pal);
d_label->setFont(MessageFont(str));
d_label->setText(str);
d_label->show();
// d_view->hide();
d_refresh_timer->stop();
}
bool MessageWidget::setUrl(const QString &str)
{
/*
QUrl url(str);
if(!url.isValid()) {
setText(tr("invalid URL")+": "+str.toUtf8().constData(),Qt::black);
d_refresh_timer->stop();
return false;
}
if((url.scheme().toLower()!="http")&&
(url.scheme().toLower()!="https")&&
(url.scheme().toLower()!="file")) {
setText(tr("unsupported URL scheme")+": "+str.toUtf8().constData(),
Qt::black);
d_refresh_timer->stop();
return false;
}
d_view->load(url);
d_view->show();
d_label->hide();
d_url=str;
rda->airplayConf()->setMessageWidgetUrl(str);
if(url.scheme().toLower()=="file") {
d_refresh_timer->start(1000);
}
else {
d_refresh_timer->stop();
}
*/
return true;
}
void MessageWidget::clear()
{
d_label->clear();
d_label->show();
// d_view->hide();
d_refresh_timer->stop();
rda->airplayConf()->setMessageWidgetUrl(QString());
}
void MessageWidget::webLoadFinishedData(bool state)
{
/*
d_view->page()->mainFrame()->
setScrollBarPolicy(Qt::Horizontal,Qt::ScrollBarAlwaysOff);
d_view->page()->mainFrame()->
setScrollBarPolicy(Qt::Vertical,Qt::ScrollBarAlwaysOff);
*/
}
void MessageWidget::refreshData()
{
// d_view->load(d_url);
d_refresh_timer->start(1000);
}
void MessageWidget::resizeEvent(QResizeEvent *e)
{
d_label->setGeometry(0,0,size().width(),size().height());
// d_view->setGeometry(0,0,size().width(),size().height());
}
QFont MessageWidget::MessageFont(QString str) const
{
for(int i=(MESSAGE_FONT_QUANTITY-1);i>=0;i--) {
if(d_message_metrics[i]->horizontalAdvance(str)<MESSAGE_WIDGET_WIDTH) {
return d_message_fonts[i];
}
}
return d_message_fonts[0];
}