| 
									
										
										
										
											2020-09-20 01:06:34 +02:00
										 |  |  | ///////////////////////////////////////////////////////////////////////////////////
 | 
					
						
							| 
									
										
										
										
											2023-11-19 13:31:45 +01:00
										 |  |  | // Copyright (C) 2012 maintech GmbH, Otto-Hahn-Str. 15, 97204 Hoechberg, Germany //
 | 
					
						
							|  |  |  | // written by Christian Daniel                                                   //
 | 
					
						
							|  |  |  | // Copyright (C) 2017, 2019-2020, 2022 Edouard Griffiths, F4EXB <f4exb06@gmail.com> //
 | 
					
						
							|  |  |  | // Copyright (C) 2020 Texas.C <ytexas96@yahoo.com>                               //
 | 
					
						
							|  |  |  | // Copyright (C) 2021-2022 Jon Beniston, M7RCE <jon@beniston.com>                //
 | 
					
						
							| 
									
										
										
										
											2020-09-20 01:06:34 +02:00
										 |  |  | //                                                                               //
 | 
					
						
							|  |  |  | // 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 as version 3 of the License, or                  //
 | 
					
						
							|  |  |  | // (at your option) any later version.                                           //
 | 
					
						
							|  |  |  | //                                                                               //
 | 
					
						
							|  |  |  | // 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 V3 for more details.                               //
 | 
					
						
							|  |  |  | //                                                                               //
 | 
					
						
							|  |  |  | // You should have received a copy of the GNU General Public License             //
 | 
					
						
							|  |  |  | // along with this program. If not, see <http://www.gnu.org/licenses/>.          //
 | 
					
						
							|  |  |  | ///////////////////////////////////////////////////////////////////////////////////
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-05-18 16:52:39 +01:00
										 |  |  | #include <QEvent>
 | 
					
						
							|  |  |  | #include <QPainter>
 | 
					
						
							| 
									
										
										
										
											2020-06-07 02:24:26 +08:00
										 |  |  | #include <QPainterPath>
 | 
					
						
							| 
									
										
										
										
											2014-05-18 16:52:39 +01:00
										 |  |  | #include <QMouseEvent>
 | 
					
						
							| 
									
										
										
										
											2020-08-04 23:25:50 +02:00
										 |  |  | #include <QDialog>
 | 
					
						
							| 
									
										
										
										
											2021-11-24 11:31:51 +00:00
										 |  |  | #include <QDesktopServices>
 | 
					
						
							| 
									
										
										
										
											2020-08-04 23:25:50 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-05-18 16:52:39 +01:00
										 |  |  | #include "gui/rollupwidget.h"
 | 
					
						
							| 
									
										
										
										
											2022-01-09 05:27:12 +01:00
										 |  |  | #include "settings/rollupstate.h"
 | 
					
						
							| 
									
										
										
										
											2014-05-18 16:52:39 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | RollupWidget::RollupWidget(QWidget* parent) : | 
					
						
							| 
									
										
										
										
											2021-10-30 16:20:24 +01:00
										 |  |  |     QWidget(parent), | 
					
						
							|  |  |  |     m_highlighted(false), | 
					
						
							| 
									
										
										
										
											2019-05-09 20:53:18 +02:00
										 |  |  |     m_contextMenuType(ContextMenuNone), | 
					
						
							| 
									
										
										
										
											2020-09-20 01:06:34 +02:00
										 |  |  |     m_streamIndicator("S"), | 
					
						
							| 
									
										
										
										
											2021-10-30 16:20:24 +01:00
										 |  |  |     m_channelWidget(true), | 
					
						
							|  |  |  |     m_newHeight(0) | 
					
						
							| 
									
										
										
										
											2014-05-18 16:52:39 +01:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2021-10-30 16:20:24 +01:00
										 |  |  |     setMinimumSize(250, 150); | 
					
						
							|  |  |  |     setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding); | 
					
						
							|  |  |  |     setBackgroundRole(QPalette::Window); | 
					
						
							| 
									
										
										
										
											2014-05-18 16:52:39 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-10-30 16:20:24 +01:00
										 |  |  |     setAutoFillBackground(false); | 
					
						
							|  |  |  |     setAttribute(Qt::WA_OpaquePaintEvent, true); | 
					
						
							| 
									
										
										
										
											2014-05-18 16:52:39 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-10-30 16:20:24 +01:00
										 |  |  |     // Vorgaben aus der Palette
 | 
					
						
							|  |  |  |     m_titleColor = palette().highlight().color(); | 
					
						
							|  |  |  |     m_titleTextColor = palette().highlightedText().color(); | 
					
						
							| 
									
										
										
										
											2014-05-18 16:52:39 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-01-09 05:27:12 +01:00
										 |  |  | // QByteArray RollupWidget::saveState(int version) const
 | 
					
						
							|  |  |  | // {
 | 
					
						
							|  |  |  | //     QByteArray state;
 | 
					
						
							|  |  |  | //     QDataStream stream(&state, QIODevice::WriteOnly);
 | 
					
						
							|  |  |  | //     int count = 0;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | //     for (int i = 0; i < children().count(); ++i)
 | 
					
						
							|  |  |  | //     {
 | 
					
						
							|  |  |  | //         QWidget* r = qobject_cast<QWidget*>(children()[i]);
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | //         if (r) {
 | 
					
						
							|  |  |  | //             count++;
 | 
					
						
							|  |  |  | //         }
 | 
					
						
							|  |  |  | //     }
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | //     stream << VersionMarker;
 | 
					
						
							|  |  |  | //     stream << version;
 | 
					
						
							|  |  |  | //     stream << count;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | //     for (int i = 0; i < children().count(); ++i)
 | 
					
						
							|  |  |  | //     {
 | 
					
						
							|  |  |  | //         QWidget* r = qobject_cast<QWidget*>(children()[i]);
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | //         if (r)
 | 
					
						
							|  |  |  | //         {
 | 
					
						
							|  |  |  | //             stream << r->objectName();
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | //             if (r->isHidden()) {
 | 
					
						
							|  |  |  | //                 stream << (int) 0;
 | 
					
						
							|  |  |  | //             } else {
 | 
					
						
							|  |  |  | //                 stream << (int) 1;
 | 
					
						
							|  |  |  | //             }
 | 
					
						
							|  |  |  | //         }
 | 
					
						
							|  |  |  | //     }
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | //     return state;
 | 
					
						
							|  |  |  | // }
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void RollupWidget::saveState(RollupState &state) const | 
					
						
							| 
									
										
										
										
											2014-05-18 16:52:39 +01:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2022-01-09 05:27:12 +01:00
										 |  |  |     QList<RollupState::RollupChildState>& childrenStates = state.getChildren(); | 
					
						
							|  |  |  |     childrenStates.clear(); | 
					
						
							| 
									
										
										
										
											2021-10-30 16:20:24 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-01-11 23:20:22 +01:00
										 |  |  |     for (const auto &child : children()) | 
					
						
							| 
									
										
										
										
											2021-10-30 16:20:24 +01:00
										 |  |  |     { | 
					
						
							| 
									
										
										
										
											2022-01-11 23:20:22 +01:00
										 |  |  |         QWidget* r = qobject_cast<QWidget*>(child); | 
					
						
							| 
									
										
										
										
											2021-10-30 16:20:24 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-01-11 23:20:22 +01:00
										 |  |  |         if (r && isRollupChild(r)) { | 
					
						
							| 
									
										
										
										
											2022-01-09 05:27:12 +01:00
										 |  |  |             childrenStates.push_back({r->objectName(), r->isHidden()}); | 
					
						
							| 
									
										
										
										
											2021-10-30 16:20:24 +01:00
										 |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2014-05-18 16:52:39 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-01-09 05:27:12 +01:00
										 |  |  | // bool RollupWidget::restoreState(const QByteArray& state, int version)
 | 
					
						
							|  |  |  | // {
 | 
					
						
							|  |  |  | //     if (state.isEmpty()) {
 | 
					
						
							|  |  |  | //         return false;
 | 
					
						
							|  |  |  | //     }
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | //     QByteArray sd = state;
 | 
					
						
							|  |  |  | //     QDataStream stream(&sd, QIODevice::ReadOnly);
 | 
					
						
							|  |  |  | //     int marker, v;
 | 
					
						
							|  |  |  | //     stream >> marker;
 | 
					
						
							|  |  |  | //     stream >> v;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | //     if ((stream.status() != QDataStream::Ok) || (marker != VersionMarker) || (v != version)) {
 | 
					
						
							|  |  |  | //         return false;
 | 
					
						
							|  |  |  | //     }
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | //     int count;
 | 
					
						
							|  |  |  | //     stream >> count;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | //     if (stream.status() != QDataStream::Ok) {
 | 
					
						
							|  |  |  | //         return false;
 | 
					
						
							|  |  |  | //     }
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | //     for (int i = 0; i < count; ++i)
 | 
					
						
							|  |  |  | //     {
 | 
					
						
							|  |  |  | //         QString name;
 | 
					
						
							|  |  |  | //         int visible;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | //         stream >> name;
 | 
					
						
							|  |  |  | //         stream >> visible;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | //         if (stream.status() != QDataStream::Ok) {
 | 
					
						
							|  |  |  | //             return false;
 | 
					
						
							|  |  |  | //         }
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | //         for (int j = 0; j < children().count(); ++j)
 | 
					
						
							|  |  |  | //         {
 | 
					
						
							|  |  |  | //             QWidget* r = qobject_cast<QWidget*>(children()[j]);
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | //             if (r)
 | 
					
						
							|  |  |  | //             {
 | 
					
						
							|  |  |  | //                 if (r->objectName() == name)
 | 
					
						
							|  |  |  | //                 {
 | 
					
						
							|  |  |  | //                     if (visible) {
 | 
					
						
							|  |  |  | //                         r->show();
 | 
					
						
							|  |  |  | //                     } else {
 | 
					
						
							|  |  |  | //                         r->hide();
 | 
					
						
							|  |  |  | //                     }
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | //                     break;
 | 
					
						
							|  |  |  | //                 }
 | 
					
						
							|  |  |  | //             }
 | 
					
						
							|  |  |  | //         }
 | 
					
						
							|  |  |  | //     }
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | //     return true;
 | 
					
						
							|  |  |  | // }
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void RollupWidget::restoreState(const RollupState& state) | 
					
						
							| 
									
										
										
										
											2014-05-18 16:52:39 +01:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2022-01-09 05:27:12 +01:00
										 |  |  |     const QList<RollupState::RollupChildState>& childrenStates = state.getChildren(); | 
					
						
							| 
									
										
										
										
											2021-10-30 16:20:24 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-01-11 23:20:22 +01:00
										 |  |  |     for (const auto &object : children()) | 
					
						
							| 
									
										
										
										
											2021-10-30 16:20:24 +01:00
										 |  |  |     { | 
					
						
							| 
									
										
										
										
											2022-01-11 23:20:22 +01:00
										 |  |  |         QWidget* r = qobject_cast<QWidget*>(object); | 
					
						
							| 
									
										
										
										
											2021-10-30 16:20:24 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-01-11 23:20:22 +01:00
										 |  |  |         if (r && isRollupChild(r)) | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |             for (const auto &childState : childrenStates) | 
					
						
							| 
									
										
										
										
											2021-10-30 16:20:24 +01:00
										 |  |  |             { | 
					
						
							| 
									
										
										
										
											2022-01-11 23:20:22 +01:00
										 |  |  |                 if (childState.m_objectName.compare(r->objectName()) == 0) | 
					
						
							| 
									
										
										
										
											2021-10-30 16:20:24 +01:00
										 |  |  |                 { | 
					
						
							| 
									
										
										
										
											2022-01-09 05:27:12 +01:00
										 |  |  |                     if (childState.m_isHidden) { | 
					
						
							| 
									
										
										
										
											2021-10-30 16:20:24 +01:00
										 |  |  |                         r->hide(); | 
					
						
							| 
									
										
										
										
											2022-01-09 05:27:12 +01:00
										 |  |  |                     } else { | 
					
						
							|  |  |  |                         r->show(); | 
					
						
							| 
									
										
										
										
											2021-10-30 16:20:24 +01:00
										 |  |  |                     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                     break; | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2014-05-18 16:52:39 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void RollupWidget::setTitleColor(const QColor& c) | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2021-10-30 16:20:24 +01:00
										 |  |  |     m_titleColor = c; | 
					
						
							|  |  |  |     float l = 0.2126*c.redF() + 0.7152*c.greenF() + 0.0722*c.blueF(); | 
					
						
							|  |  |  |     m_titleTextColor = l < 0.5f ? Qt::white : Qt::black; | 
					
						
							|  |  |  |     update(); | 
					
						
							| 
									
										
										
										
											2014-05-18 16:52:39 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-14 22:58:35 +01:00
										 |  |  | void RollupWidget::setHighlighted(bool highlighted) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     if (m_highlighted != highlighted) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         m_highlighted = highlighted; | 
					
						
							|  |  |  |         update(); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-05-18 16:52:39 +01:00
										 |  |  | int RollupWidget::arrangeRollups() | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2021-10-30 16:20:24 +01:00
										 |  |  |     QFontMetrics fm(font()); | 
					
						
							|  |  |  |     int pos; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     // First calculate minimum height needed, to determine how much extra space
 | 
					
						
							|  |  |  |     // we have that can be split between expanding widgets
 | 
					
						
							|  |  |  |     pos = fm.height() + 4; | 
					
						
							|  |  |  |     int expandingChildren = 0; | 
					
						
							|  |  |  |     for (int i = 0; i < children().count(); ++i) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         QWidget* r = qobject_cast<QWidget*>(children()[i]); | 
					
						
							| 
									
										
										
										
											2014-05-18 16:52:39 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-10-30 16:20:24 +01:00
										 |  |  |         if ((r != nullptr) && isRollupChild(r)) | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |             pos += fm.height() + 2; | 
					
						
							|  |  |  |             if (!r->isHidden()) | 
					
						
							|  |  |  |             { | 
					
						
							|  |  |  |                 if (r->sizePolicy().verticalPolicy() & QSizePolicy::ExpandFlag) { | 
					
						
							|  |  |  |                     expandingChildren++; | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  |                 int h = 0; | 
					
						
							|  |  |  |                 if (r->hasHeightForWidth()) { | 
					
						
							|  |  |  |                     h = r->heightForWidth(width() - 4); | 
					
						
							|  |  |  |                 } else { | 
					
						
							|  |  |  |                     h = r->minimumSizeHint().height(); | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  |                 pos += h + 5; | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2017-08-24 02:05:48 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-10-30 16:20:24 +01:00
										 |  |  |     setMinimumHeight(pos); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     // Split extra space equally between widgets
 | 
					
						
							|  |  |  |     // If there's a remainder, we give it to the first widget
 | 
					
						
							|  |  |  |     // In the future, we should probably respect 'Vertical Stretch'
 | 
					
						
							|  |  |  |     int extraSpace; | 
					
						
							|  |  |  |     int firstExtra; | 
					
						
							| 
									
										
										
										
											2022-01-09 05:27:12 +01:00
										 |  |  |     if ((expandingChildren > 0) && (m_newHeight > pos)) | 
					
						
							| 
									
										
										
										
											2021-10-30 16:20:24 +01:00
										 |  |  |     { | 
					
						
							|  |  |  |         int totalExtra = m_newHeight - pos; | 
					
						
							|  |  |  |         extraSpace = totalExtra / expandingChildren; | 
					
						
							|  |  |  |         firstExtra = totalExtra - (extraSpace * expandingChildren); | 
					
						
							| 
									
										
										
										
											2022-01-09 05:27:12 +01:00
										 |  |  |     } | 
					
						
							|  |  |  |     else | 
					
						
							| 
									
										
										
										
											2021-10-30 16:20:24 +01:00
										 |  |  |     { | 
					
						
							|  |  |  |         extraSpace = 0; | 
					
						
							|  |  |  |         firstExtra = 0; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     // Now reposition and resize child widgets
 | 
					
						
							|  |  |  |     pos = fm.height() + 4; | 
					
						
							|  |  |  |     for (int i = 0; i < children().count(); ++i) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         QWidget* r = qobject_cast<QWidget*>(children()[i]); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if ((r != nullptr) && isRollupChild(r)) | 
					
						
							|  |  |  |         { | 
					
						
							| 
									
										
										
										
											2020-08-04 23:25:50 +02:00
										 |  |  |             pos += fm.height() + 2; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-08-24 19:42:25 +02:00
										 |  |  |             if (!r->isHidden()) | 
					
						
							|  |  |  |             { | 
					
						
							|  |  |  |                 r->move(2, pos + 3); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-10-30 16:20:24 +01:00
										 |  |  |                 int h = 0; | 
					
						
							| 
									
										
										
										
											2020-08-24 19:42:25 +02:00
										 |  |  |                 if (r->hasHeightForWidth()) { | 
					
						
							|  |  |  |                     h = r->heightForWidth(width() - 4); | 
					
						
							|  |  |  |                 } else { | 
					
						
							| 
									
										
										
										
											2021-10-30 16:20:24 +01:00
										 |  |  |                     h = r->minimumSizeHint().height(); | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  |                 if (r->sizePolicy().verticalPolicy() & QSizePolicy::ExpandFlag) | 
					
						
							|  |  |  |                 { | 
					
						
							|  |  |  |                     h += extraSpace; | 
					
						
							|  |  |  |                     h += firstExtra; | 
					
						
							|  |  |  |                     firstExtra = 0; | 
					
						
							| 
									
										
										
										
											2020-08-24 19:42:25 +02:00
										 |  |  |                 } | 
					
						
							| 
									
										
										
										
											2020-08-04 23:25:50 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-08-24 19:42:25 +02:00
										 |  |  |                 r->resize(width() - 4, h); | 
					
						
							|  |  |  |                 pos += r->height() + 5; | 
					
						
							|  |  |  |             } | 
					
						
							| 
									
										
										
										
											2021-10-30 16:20:24 +01:00
										 |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2017-08-24 02:05:48 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-10-30 16:20:24 +01:00
										 |  |  |     if (expandingChildren == 0) { | 
					
						
							|  |  |  |         setMaximumHeight(pos); | 
					
						
							|  |  |  |     } else { | 
					
						
							|  |  |  |         setMaximumHeight(16777215); | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2022-03-18 17:07:52 +00:00
										 |  |  |     updateGeometry(); | 
					
						
							| 
									
										
										
										
											2021-10-30 16:20:24 +01:00
										 |  |  |     return pos; | 
					
						
							| 
									
										
										
										
											2014-05-18 16:52:39 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void RollupWidget::paintEvent(QPaintEvent*) | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2021-10-30 16:20:24 +01:00
										 |  |  |     QPainter p(this); | 
					
						
							|  |  |  |     QColor frame = palette().highlight().color(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     // Eigenbau
 | 
					
						
							|  |  |  |     QFontMetrics fm(font()); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     p.setRenderHint(QPainter::Antialiasing, true); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-11-24 11:31:51 +00:00
										 |  |  |     // Ecken (corners)
 | 
					
						
							| 
									
										
										
										
											2021-10-30 16:20:24 +01:00
										 |  |  |     p.setPen(Qt::NoPen); | 
					
						
							|  |  |  |     p.setBrush(palette().base()); | 
					
						
							|  |  |  |     p.drawRect(0, 0, 5, 5); | 
					
						
							|  |  |  |     p.drawRect(width() - 5, 0, 5, 5); | 
					
						
							|  |  |  |     p.drawRect(0, height() - 5, 5, 5); | 
					
						
							|  |  |  |     p.drawRect(width() - 5, height() - 5, 5, 5); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-11-24 11:31:51 +00:00
										 |  |  |     // Rahmen (frame)
 | 
					
						
							| 
									
										
										
										
											2021-10-30 16:20:24 +01:00
										 |  |  |     p.setPen(m_highlighted ? Qt::white : frame); | 
					
						
							|  |  |  |     p.setBrush(palette().window()); | 
					
						
							|  |  |  |     QRectF r(rect()); | 
					
						
							|  |  |  |     r.adjust(0.5, 0.5, -0.5, -0.5); | 
					
						
							|  |  |  |     p.drawRoundedRect(r, 3.0, 3.0, Qt::AbsoluteSize); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-11-24 11:31:51 +00:00
										 |  |  |     // Titel-Hintergrund (Title background)
 | 
					
						
							| 
									
										
										
										
											2021-10-30 16:20:24 +01:00
										 |  |  |     p.setPen(Qt::NoPen); | 
					
						
							|  |  |  |     p.setBrush(m_titleColor); | 
					
						
							|  |  |  |     QPainterPath path; | 
					
						
							|  |  |  |     path.moveTo(1.5, fm.height() + 2.5); | 
					
						
							|  |  |  |     path.lineTo(width() - 1.5, fm.height() + 2.5); | 
					
						
							|  |  |  |     path.lineTo(width() - 1.5, 3.5); | 
					
						
							|  |  |  |     path.arcTo(QRectF(width() - 3.5, 0, 2.5, 2.5), 270, -90); | 
					
						
							|  |  |  |     path.lineTo(3.5, 1.5); | 
					
						
							|  |  |  |     path.arcTo(QRectF(1.5, 2.5, 2.5, 2.5), 90, 90); | 
					
						
							|  |  |  |     p.drawPath(path); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-11-24 11:31:51 +00:00
										 |  |  |     // Titel-Abschlusslinie (Title closing line)
 | 
					
						
							| 
									
										
										
										
											2021-10-30 16:20:24 +01:00
										 |  |  |     p.setPen(frame); | 
					
						
							|  |  |  |     p.drawLine(QPointF(0.5, 2 + fm.height() + 1.5), QPointF(width() - 1.5, 2 + fm.height() + 1.5)); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     // Aktiv-Button links
 | 
					
						
							|  |  |  |     p.setPen(QPen(palette().windowText().color(), 1.0)); | 
					
						
							|  |  |  |     p.setBrush(palette().light()); | 
					
						
							|  |  |  |     p.drawRoundedRect(QRectF(3.5, 3.5, fm.ascent(), fm.ascent()), 2.0, 2.0, Qt::AbsoluteSize); | 
					
						
							|  |  |  |     p.setPen(QPen(Qt::white, 1.0)); | 
					
						
							|  |  |  |     p.drawText(QRectF(3.5, 2.5, fm.ascent(), fm.ascent()),  Qt::AlignCenter, "c"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if (m_channelWidget) | 
					
						
							|  |  |  |     { | 
					
						
							| 
									
										
										
										
											2021-11-24 11:31:51 +00:00
										 |  |  |         // Stromkanal-Button links (Current channel)
 | 
					
						
							| 
									
										
										
										
											2021-10-30 16:20:24 +01:00
										 |  |  |         p.setPen(QPen(palette().windowText().color(), 1.0)); | 
					
						
							|  |  |  |         p.setBrush(palette().light()); | 
					
						
							|  |  |  |         p.drawRoundedRect(QRectF(5.5 + fm.ascent(), 2.5, fm.ascent() + 2.0, fm.ascent() + 2.0), 2.0, 2.0, Qt::AbsoluteSize); | 
					
						
							|  |  |  |         p.setPen(QPen(Qt::white, 1.0)); | 
					
						
							|  |  |  |         p.drawText(QRectF(5.5 + fm.ascent(), 2.5, fm.ascent() + 2.0, fm.ascent() + 2.0),  Qt::AlignCenter, m_streamIndicator); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-11-24 11:31:51 +00:00
										 |  |  |     // Help button
 | 
					
						
							|  |  |  |     if (!m_helpURL.isEmpty()) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         p.setRenderHint(QPainter::Antialiasing, true); | 
					
						
							|  |  |  |         p.setPen(QPen(palette().windowText().color(), 1.0)); | 
					
						
							|  |  |  |         p.setBrush(palette().light()); | 
					
						
							|  |  |  |         r = QRectF(width() - 2*(3.5 + fm.ascent()), 3.5, fm.ascent(), fm.ascent()); | 
					
						
							|  |  |  |         p.drawRoundedRect(r, 2.0, 2.0, Qt::AbsoluteSize); | 
					
						
							|  |  |  |         p.drawText(QRectF(width() - 2*(3.5 + fm.ascent()), 5, fm.ascent(), fm.ascent() - 2), Qt::AlignCenter, "?"); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     //p.drawLine(r.topLeft() + QPointF(1, 1), r.bottomRight() + QPointF(-1, -1));
 | 
					
						
							|  |  |  |     //p.drawLine(r.bottomLeft() + QPointF(1, -1), r.topRight() + QPointF(-1, 1));
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     // Schließen-Button rechts (Close button on the right)
 | 
					
						
							| 
									
										
										
										
											2021-10-30 16:20:24 +01:00
										 |  |  |     p.setRenderHint(QPainter::Antialiasing, true); | 
					
						
							|  |  |  |     p.setPen(QPen(palette().windowText().color(), 1.0)); | 
					
						
							|  |  |  |     p.setBrush(palette().light()); | 
					
						
							|  |  |  |     r = QRectF(width() - 3.5 - fm.ascent(), 3.5, fm.ascent(), fm.ascent()); | 
					
						
							|  |  |  |     p.drawRoundedRect(r, 2.0, 2.0, Qt::AbsoluteSize); | 
					
						
							|  |  |  |     p.setPen(QPen(palette().windowText().color(), 1.5)); | 
					
						
							|  |  |  |     p.drawLine(r.topLeft() + QPointF(1, 1), r.bottomRight() + QPointF(-1, -1)); | 
					
						
							|  |  |  |     p.drawLine(r.bottomLeft() + QPointF(1, -1), r.topRight() + QPointF(-1, 1)); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     // Titel
 | 
					
						
							|  |  |  |     //p.setPen(palette().highlightedText().color());
 | 
					
						
							|  |  |  |     p.setPen(m_titleTextColor); | 
					
						
							|  |  |  |     p.drawText(QRect(2 + 2*fm.height() + 2, 2, width() - 6 - 3*fm.height(), fm.height()), | 
					
						
							|  |  |  |         fm.elidedText(windowTitle(), Qt::ElideMiddle, width() - 6 - 3*fm.height(), 0)); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     // Rollups
 | 
					
						
							|  |  |  |     int pos = fm.height() + 4; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     const QObjectList& c = children(); | 
					
						
							|  |  |  |     QObjectList::ConstIterator w = c.begin(); | 
					
						
							|  |  |  |     QObjectList::ConstIterator n = c.begin(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     for (n = c.begin(); n != c.end(); ++n) | 
					
						
							| 
									
										
										
										
											2020-08-04 23:25:50 +02:00
										 |  |  |     { | 
					
						
							| 
									
										
										
										
											2021-10-30 16:20:24 +01:00
										 |  |  |         if (qobject_cast<QWidget*>(*n) != nullptr) { | 
					
						
							|  |  |  |             break; | 
					
						
							| 
									
										
										
										
											2020-08-04 23:25:50 +02:00
										 |  |  |         } | 
					
						
							| 
									
										
										
										
											2021-10-30 16:20:24 +01:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2020-08-04 23:25:50 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-10-30 16:20:24 +01:00
										 |  |  |     for (w = n; w != c.end(); w = n) | 
					
						
							| 
									
										
										
										
											2020-08-04 23:25:50 +02:00
										 |  |  |     { | 
					
						
							| 
									
										
										
										
											2021-10-30 16:20:24 +01:00
										 |  |  |         if (n != c.end()) { | 
					
						
							|  |  |  |             ++n; | 
					
						
							| 
									
										
										
										
											2020-08-04 23:25:50 +02:00
										 |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-10-30 16:20:24 +01:00
										 |  |  |         for (; n != c.end(); ++n) | 
					
						
							| 
									
										
										
										
											2020-08-04 23:25:50 +02:00
										 |  |  |         { | 
					
						
							| 
									
										
										
										
											2021-10-30 16:20:24 +01:00
										 |  |  |             if (qobject_cast<QWidget*>(*n) != nullptr) { | 
					
						
							|  |  |  |                 break; | 
					
						
							| 
									
										
										
										
											2020-08-04 23:25:50 +02:00
										 |  |  |             } | 
					
						
							| 
									
										
										
										
											2021-10-30 16:20:24 +01:00
										 |  |  |         } | 
					
						
							| 
									
										
										
										
											2020-08-04 23:25:50 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |         pos += paintRollup(qobject_cast<QWidget*>(*w), pos, &p, n == c.end(), frame); | 
					
						
							| 
									
										
										
										
											2021-10-30 16:20:24 +01:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2014-05-18 16:52:39 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | int RollupWidget::paintRollup(QWidget* rollup, int pos, QPainter* p, bool last, const QColor& frame) | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2021-10-30 16:20:24 +01:00
										 |  |  |     QFontMetrics fm(font()); | 
					
						
							|  |  |  |     int height = 1; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     // Titel-Abschlusslinie
 | 
					
						
							|  |  |  |     if (!rollup->isHidden()) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         p->setPen(palette().dark().color()); | 
					
						
							|  |  |  |         p->drawLine(QPointF(1.5, pos + fm.height() + 1.5), QPointF(width() - 1.5, pos + fm.height() + 1.5)); | 
					
						
							|  |  |  |         p->setPen(palette().light().color()); | 
					
						
							|  |  |  |         p->drawLine(QPointF(1.5, pos + fm.height() + 2.5), QPointF(width() - 1.5, pos + fm.height() + 2.5)); | 
					
						
							|  |  |  |         height += 2; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     else | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         if (!last) | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |             p->setPen(frame); | 
					
						
							|  |  |  |             p->drawLine(QPointF(1.5, pos + fm.height() + 1.5), QPointF(width() - 1.5, pos + fm.height() + 1.5)); | 
					
						
							|  |  |  |             height++; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     // Titel
 | 
					
						
							|  |  |  |     p->setPen(palette().windowText().color()); | 
					
						
							|  |  |  |     p->drawText(QRect(2 + fm.height(), pos, width() - 4 - fm.height(), fm.height()), | 
					
						
							|  |  |  |         fm.elidedText(rollup->windowTitle(), Qt::ElideMiddle, width() - 4 - fm.height(), 0)); | 
					
						
							|  |  |  |     height += fm.height(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     // Ausklapp-Icon
 | 
					
						
							|  |  |  |     p->setPen(palette().windowText().color()); | 
					
						
							|  |  |  |     p->setBrush(palette().windowText()); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if (!rollup->isHidden()) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         QPolygonF a; | 
					
						
							|  |  |  |         a.append(QPointF(3.5, pos + 2)); | 
					
						
							|  |  |  |         a.append(QPointF(3.5 + fm.ascent(), pos + 2)); | 
					
						
							|  |  |  |         a.append(QPointF(3.5 + fm.ascent() / 2.0, pos + fm.height() - 2)); | 
					
						
							|  |  |  |         p->drawPolygon(a); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     else | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         QPolygonF a; | 
					
						
							|  |  |  |         a.append(QPointF(3.5, pos + 2)); | 
					
						
							|  |  |  |         a.append(QPointF(3.5, pos + fm.height() - 2)); | 
					
						
							|  |  |  |         a.append(QPointF(3.5 + fm.ascent(), pos + fm.height() / 2)); | 
					
						
							|  |  |  |         p->drawPolygon(a); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     // Inhalt
 | 
					
						
							|  |  |  |     if (!rollup->isHidden() && (!last)) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         // Rollup-Abschlusslinie
 | 
					
						
							|  |  |  |         p->setPen(frame); | 
					
						
							|  |  |  |         p->drawLine(QPointF(1.5, pos + fm.height() + rollup->height() + 6.5), | 
					
						
							|  |  |  |                     QPointF(width() - 1.5, pos + fm.height() + rollup->height() + 6.5)); | 
					
						
							|  |  |  |         height += rollup->height() + 4; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     return height; | 
					
						
							| 
									
										
										
										
											2014-05-18 16:52:39 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void RollupWidget::resizeEvent(QResizeEvent* size) | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2021-10-30 16:20:24 +01:00
										 |  |  |     m_newHeight = size->size().height(); | 
					
						
							|  |  |  |     arrangeRollups(); | 
					
						
							|  |  |  |     QWidget::resizeEvent(size); | 
					
						
							| 
									
										
										
										
											2014-05-18 16:52:39 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void RollupWidget::mousePressEvent(QMouseEvent* event) | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2021-10-30 16:20:24 +01:00
										 |  |  |     QFontMetrics fm(font()); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     // menu box left
 | 
					
						
							|  |  |  |     if (QRectF(3.5, 3.5, fm.ascent(), fm.ascent()).contains(event->pos())) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         m_contextMenuType = ContextMenuChannelSettings; | 
					
						
							|  |  |  |         emit customContextMenuRequested(event->globalPos()); | 
					
						
							|  |  |  |         return; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if (m_channelWidget) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         // Stream channel menu left
 | 
					
						
							|  |  |  |         if (QRectF(5.5 + fm.ascent(), 2.5, fm.ascent() + 2.0, fm.ascent() + 2.0).contains(event->pos())) | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |             m_contextMenuType = ContextMenuStreamSettings; | 
					
						
							|  |  |  |             emit customContextMenuRequested(event->globalPos()); | 
					
						
							|  |  |  |             return; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-11-24 11:31:51 +00:00
										 |  |  |     // help button
 | 
					
						
							|  |  |  |     if(!m_helpURL.isEmpty() && QRectF(width() - 2*(3.5 + fm.ascent()), 3.5, fm.ascent(), fm.ascent()).contains(event->pos())) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         QString url; | 
					
						
							|  |  |  |         if (m_helpURL.startsWith("http")) { | 
					
						
							|  |  |  |             url = m_helpURL; | 
					
						
							|  |  |  |         } else { | 
					
						
							|  |  |  |             url = QString("https://github.com/f4exb/sdrangel/blob/master/%1").arg(m_helpURL); // Something like "plugins/channelrx/chanalyzer/readme.md"
 | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         QDesktopServices::openUrl(QUrl(url)); | 
					
						
							|  |  |  |         return; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-10-30 16:20:24 +01:00
										 |  |  |     // close button right
 | 
					
						
							|  |  |  |     if(QRectF(width() - 3.5 - fm.ascent(), 3.5, fm.ascent(), fm.ascent()).contains(event->pos())) { | 
					
						
							|  |  |  |         close(); | 
					
						
							|  |  |  |         return; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     // check if we need to change a rollup widget
 | 
					
						
							|  |  |  |     int pos = fm.height() + 4; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     for (int i = 0; i < children().count(); ++i) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         QWidget* r = qobject_cast<QWidget*>(children()[i]); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if (r) | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |             if ((event->y() >= pos) && (event->y() < (pos + fm.height() + 3))) | 
					
						
							|  |  |  |             { | 
					
						
							|  |  |  |                 if (r->isHidden()) | 
					
						
							|  |  |  |                 { | 
					
						
							|  |  |  |                     r->show(); | 
					
						
							|  |  |  |                     //emit widgetRolled(r, true);
 | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  |                 else | 
					
						
							|  |  |  |                 { | 
					
						
							|  |  |  |                     r->hide(); | 
					
						
							|  |  |  |                     //emit widgetRolled(r, false);
 | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                 arrangeRollups(); | 
					
						
							|  |  |  |                 repaint(); | 
					
						
							|  |  |  |                 return; | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |             else | 
					
						
							|  |  |  |             { | 
					
						
							|  |  |  |                 pos += fm.height() + 2; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                 if (!r->isHidden()) { | 
					
						
							|  |  |  |                     pos += r->height() + 5; | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2014-05-18 16:52:39 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | bool RollupWidget::event(QEvent* event) | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2021-10-30 16:20:24 +01:00
										 |  |  |     if (event->type() == QEvent::ChildAdded) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         ((QChildEvent*)event)->child()->installEventFilter(this); | 
					
						
							|  |  |  |         arrangeRollups(); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     else if (event->type() == QEvent::ChildRemoved) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         ((QChildEvent*)event)->child()->removeEventFilter(this); | 
					
						
							|  |  |  |         arrangeRollups(); | 
					
						
							| 
									
										
										
										
											2022-10-02 20:07:28 +01:00
										 |  |  |     } | 
					
						
							|  |  |  |     else if (event->type() == QEvent::LayoutRequest) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         arrangeRollups(); | 
					
						
							| 
									
										
										
										
											2021-10-30 16:20:24 +01:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     return QWidget::event(event); | 
					
						
							| 
									
										
										
										
											2014-05-18 16:52:39 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | bool RollupWidget::eventFilter(QObject* object, QEvent* event) | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2021-10-30 16:20:24 +01:00
										 |  |  |     if (event->type() == QEvent::Show) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         if (children().contains(object)) | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |             arrangeRollups(); | 
					
						
							|  |  |  |             emit widgetRolled(qobject_cast<QWidget*>(object), true); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     else if (event->type() == QEvent::Hide) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         if (children().contains(object)) | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |             arrangeRollups(); | 
					
						
							|  |  |  |             emit widgetRolled(qobject_cast<QWidget*>(object), false); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     else if (event->type() == QEvent::WindowTitleChange) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         if (children().contains(object)) { | 
					
						
							|  |  |  |             repaint(); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     return QWidget::eventFilter(object, event); | 
					
						
							| 
									
										
										
										
											2014-05-18 16:52:39 +01:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2019-05-20 16:31:15 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | void RollupWidget::setStreamIndicator(const QString& indicator) | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2021-10-30 16:20:24 +01:00
										 |  |  |     m_streamIndicator = indicator; | 
					
						
							|  |  |  |     update(); | 
					
						
							| 
									
										
										
										
											2020-06-07 02:24:26 +08:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2020-08-04 23:25:50 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | bool RollupWidget::isRollupChild(QWidget *childWidget) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     return (qobject_cast<QDialog*>(childWidget) == nullptr); // exclude Dialogs from rollups
 | 
					
						
							| 
									
										
										
										
											2021-10-30 16:20:24 +01:00
										 |  |  | } |