diff --git a/src/modules/license/LicenseWidget.cpp b/src/modules/license/LicenseWidget.cpp index bf20ffc51..831844d5a 100644 --- a/src/modules/license/LicenseWidget.cpp +++ b/src/modules/license/LicenseWidget.cpp @@ -21,11 +21,30 @@ #include "LicenseWidget.h" +#include "utils/Logger.h" + #include +#include #include #include #include +#include +static QString +loadLocalFile( const QUrl& u ) +{ + if ( !u.isLocalFile() ) + return QString(); + + QFile file( u.path() ); + if ( !file.open(QIODevice::ReadOnly | QIODevice::Text) ) + { + cWarning() << "Could not load license file" << u; + return QString(); + } + + return file.readAll(); +} LicenseWidget::LicenseWidget( LicenseEntry entry, QWidget* parent ) : QWidget( parent ) @@ -33,6 +52,7 @@ LicenseWidget::LicenseWidget( LicenseEntry entry, QWidget* parent ) , m_label( new QLabel( this ) ) , m_viewLicenseLabel( new QLabel( this ) ) , m_expandLicenseButton( nullptr ) + , m_fullText( nullptr ) { QPalette pal( palette() ); pal.setColor( QPalette::Background, palette().background().color().lighter( 108 ) ); @@ -43,7 +63,6 @@ LicenseWidget::LicenseWidget( LicenseEntry entry, QWidget* parent ) setContentsMargins( 4, 4, 4, 4 ); QHBoxLayout* wiLayout = new QHBoxLayout; - setLayout( wiLayout ); m_label->setWordWrap( true ); m_label->setSizePolicy( QSizePolicy::Preferred, QSizePolicy::Minimum ); @@ -55,11 +74,21 @@ LicenseWidget::LicenseWidget( LicenseEntry entry, QWidget* parent ) if ( m_entry.isLocal() ) { + QVBoxLayout* vLayout = new QVBoxLayout; + m_expandLicenseButton = new QToolButton( this ); - m_expandLicenseButton->setArrowType( Qt::DownArrow ); + m_expandLicenseButton->setArrowType( Qt::UpArrow ); wiLayout->addWidget( m_expandLicenseButton ); connect( m_expandLicenseButton, &QAbstractButton::clicked, this, &LicenseWidget::expandClicked ); + + vLayout->addLayout( wiLayout ); + m_fullText = new QLabel( this ); + m_fullText->setText( loadLocalFile( m_entry.m_url ) ); + m_fullText->hide(); + + vLayout->addWidget( m_fullText ); + setLayout( vLayout ); } else { @@ -71,6 +100,8 @@ LicenseWidget::LicenseWidget( LicenseEntry entry, QWidget* parent ) // Normally setOpenExternalLinks( true ) would do, but we need the // open code anyway for the toolbutton, let's share it. connect( m_viewLicenseLabel, &QLabel::linkActivated, this, &LicenseWidget::viewClicked ); + + setLayout( wiLayout ); // Only the horizontal layout needed } retranslateUi(); @@ -146,6 +177,11 @@ LicenseWidget::expandClicked() { m_expandLicenseButton->setArrowType( Qt::DownArrow ); } + + // Show/hide based on the new arrow direction. + if ( m_fullText ) + m_fullText->setHidden( m_expandLicenseButton->arrowType() == Qt::UpArrow ); + updateExpandToolTip(); } @@ -156,7 +192,7 @@ LicenseWidget::updateExpandToolTip() return; m_expandLicenseButton->setToolTip( - ( m_expandLicenseButton->arrowType() == Qt::DownArrow ) + ( m_expandLicenseButton->arrowType() == Qt::UpArrow ) ? tr( "Show complete license text" ) : tr( "Hide license text" ) ) ; diff --git a/src/modules/license/LicenseWidget.h b/src/modules/license/LicenseWidget.h index dcddf7f3c..c43233da4 100644 --- a/src/modules/license/LicenseWidget.h +++ b/src/modules/license/LicenseWidget.h @@ -46,5 +46,6 @@ private: QLabel* m_label; QLabel* m_viewLicenseLabel; QToolButton* m_expandLicenseButton; + QLabel* m_fullText; } ; #endif