1
0
mirror of https://github.com/f4exb/sdrangel.git synced 2025-09-05 06:37:51 -04:00

Massive UI revamping (v7): beter handling of expandable rollup sup widgets. Part of #1209

This commit is contained in:
f4exb 2022-04-23 11:30:06 +02:00
parent 3b35e22328
commit 758797f63a
36 changed files with 528 additions and 210 deletions

View File

@ -103,10 +103,11 @@ BeamSteeringCWModGUI::BeamSteeringCWModGUI(PluginAPI* pluginAPI, DeviceUISet *de
m_centerFrequency(435000000), m_centerFrequency(435000000),
m_tickCount(0) m_tickCount(0)
{ {
setAttribute(Qt::WA_DeleteOnClose, true);
m_helpURL = "plugins/channelmimo/beamsteeringcwmod/readme.md";
ui->setupUi(getRollupContents()); ui->setupUi(getRollupContents());
setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
getRollupContents()->arrangeRollups(); getRollupContents()->arrangeRollups();
setAttribute(Qt::WA_DeleteOnClose, true);
connect(getRollupContents(), SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool))); connect(getRollupContents(), SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool)));
connect(this, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(onMenuDialogCalled(const QPoint &))); connect(this, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(onMenuDialogCalled(const QPoint &)));

View File

@ -106,11 +106,13 @@ InterferometerGUI::InterferometerGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUI
m_centerFrequency(435000000), m_centerFrequency(435000000),
m_tickCount(0) m_tickCount(0)
{ {
ui->setupUi(getRollupContents());
getRollupContents()->arrangeRollups();
setAttribute(Qt::WA_DeleteOnClose, true); setAttribute(Qt::WA_DeleteOnClose, true);
m_helpURL = "plugins/channelmimo/interferometer/readme.md";
connect(getRollupContents(), SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool))); RollupContents *rollupContents = getRollupContents();
ui->setupUi(rollupContents);
setSizePolicy(rollupContents->sizePolicy());
rollupContents->arrangeRollups();
connect(rollupContents, SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool)));
connect(this, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(onMenuDialogCalled(const QPoint &))); connect(this, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(onMenuDialogCalled(const QPoint &)));
m_interferometer = (Interferometer*) channelMIMO; m_interferometer = (Interferometer*) channelMIMO;
@ -248,7 +250,18 @@ void InterferometerGUI::onWidgetRolled(QWidget* widget, bool rollDown)
(void) widget; (void) widget;
(void) rollDown; (void) rollDown;
getRollupContents()->saveState(m_rollupState); RollupContents *rollupContents = getRollupContents();
if (rollupContents->hasExpandableWidgets()) {
setSizePolicy(sizePolicy().horizontalPolicy(), QSizePolicy::Expanding);
} else {
setSizePolicy(sizePolicy().horizontalPolicy(), QSizePolicy::Fixed);
}
int h = rollupContents->height() + rollupContents->getAdditionalHeiht() + getAdditionalHeight();
resize(width(), h);
rollupContents->saveState(m_rollupState);
applySettings(); applySettings();
} }

View File

@ -458,6 +458,17 @@ void ChannelAnalyzerGUI::onWidgetRolled(QWidget* widget, bool rollDown)
(void) widget; (void) widget;
(void) rollDown; (void) rollDown;
RollupContents *rollupContents = getRollupContents();
if (rollupContents->hasExpandableWidgets()) {
setSizePolicy(sizePolicy().horizontalPolicy(), QSizePolicy::Expanding);
} else {
setSizePolicy(sizePolicy().horizontalPolicy(), QSizePolicy::Fixed);
}
int h = rollupContents->height() + rollupContents->getAdditionalHeiht() + getAdditionalHeight();
resize(width(), h);
getRollupContents()->saveState(m_rollupState); getRollupContents()->saveState(m_rollupState);
applySettings(); applySettings();
} }
@ -518,12 +529,13 @@ ChannelAnalyzerGUI::ChannelAnalyzerGUI(PluginAPI* pluginAPI, DeviceUISet *device
m_doApplySettings(true), m_doApplySettings(true),
m_basebandSampleRate(48000) m_basebandSampleRate(48000)
{ {
ui->setupUi(getRollupContents());
getRollupContents()->arrangeRollups();
m_helpURL = "plugins/channelrx/chanalyzer/readme.md";
setAttribute(Qt::WA_DeleteOnClose, true); setAttribute(Qt::WA_DeleteOnClose, true);
m_helpURL = "plugins/channelrx/chanalyzer/readme.md";
connect(getRollupContents(), SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool))); RollupContents *rollupContents = getRollupContents();
ui->setupUi(rollupContents);
setSizePolicy(rollupContents->sizePolicy());
rollupContents->arrangeRollups();
connect(rollupContents, SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool)));
connect(this, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(onMenuDialogCalled(const QPoint &))); connect(this, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(onMenuDialogCalled(const QPoint &)));
m_channelAnalyzer = (ChannelAnalyzer*) rxChannel; m_channelAnalyzer = (ChannelAnalyzer*) rxChannel;

View File

@ -2765,7 +2765,18 @@ void ADSBDemodGUI::onWidgetRolled(QWidget* widget, bool rollDown)
(void) widget; (void) widget;
(void) rollDown; (void) rollDown;
getRollupContents()->saveState(m_rollupState); RollupContents *rollupContents = getRollupContents();
if (rollupContents->hasExpandableWidgets()) {
setSizePolicy(sizePolicy().horizontalPolicy(), QSizePolicy::Expanding);
} else {
setSizePolicy(sizePolicy().horizontalPolicy(), QSizePolicy::Fixed);
}
int h = rollupContents->height() + rollupContents->getAdditionalHeiht() + getAdditionalHeight();
resize(width(), h);
rollupContents->saveState(m_rollupState);
applySettings(); applySettings();
} }
@ -3694,9 +3705,13 @@ ADSBDemodGUI::ADSBDemodGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, Baseb
m_highlightAircraft(nullptr), m_highlightAircraft(nullptr),
m_progressDialog(nullptr) m_progressDialog(nullptr)
{ {
ui->setupUi(getRollupContents()); setAttribute(Qt::WA_DeleteOnClose, true);
getRollupContents()->arrangeRollups();
m_helpURL = "plugins/channelrx/demodadsb/readme.md"; m_helpURL = "plugins/channelrx/demodadsb/readme.md";
RollupContents *rollupContents = getRollupContents();
ui->setupUi(rollupContents);
setSizePolicy(rollupContents->sizePolicy());
rollupContents->arrangeRollups();
connect(rollupContents, SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool)));
m_osmPort = 0; // Pick a free port m_osmPort = 0; // Pick a free port
m_templateServer = new ADSBOSMTemplateServer("q2RVNAe3eFKCH4XsrE3r", m_osmPort); m_templateServer = new ADSBOSMTemplateServer("q2RVNAe3eFKCH4XsrE3r", m_osmPort);
@ -3707,9 +3722,6 @@ ADSBDemodGUI::ADSBDemodGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, Baseb
ui->map->rootContext()->setContextProperty("navAidModel", &m_navAidModel); ui->map->rootContext()->setContextProperty("navAidModel", &m_navAidModel);
ui->map->setSource(QUrl(QStringLiteral("qrc:/map/map.qml"))); ui->map->setSource(QUrl(QStringLiteral("qrc:/map/map.qml")));
setAttribute(Qt::WA_DeleteOnClose, true);
connect(getRollupContents(), SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool)));
connect(this, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(onMenuDialogCalled(const QPoint &))); connect(this, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(onMenuDialogCalled(const QPoint &)));
connect(&m_dlm, &HttpDownloadManager::downloadComplete, this, &ADSBDemodGUI::downloadFinished); connect(&m_dlm, &HttpDownloadManager::downloadComplete, this, &ADSBDemodGUI::downloadFinished);

View File

@ -371,18 +371,25 @@ void AISDemodGUI::onWidgetRolled(QWidget* widget, bool rollDown)
{ {
if (widget == ui->scopeContainer) if (widget == ui->scopeContainer)
{ {
if (rollDown) if (rollDown) {
{ setMinimumWidth(716); // Make wide enough for scope controls
// Make wide enough for scope controls } else {
setMinimumWidth(716);
}
else
{
setMinimumWidth(352); setMinimumWidth(352);
} }
} }
getRollupContents()->saveState(m_rollupState); RollupContents *rollupContents = getRollupContents();
if (rollupContents->hasExpandableWidgets()) {
setSizePolicy(sizePolicy().horizontalPolicy(), QSizePolicy::Expanding);
} else {
setSizePolicy(sizePolicy().horizontalPolicy(), QSizePolicy::Fixed);
}
int h = rollupContents->height() + rollupContents->getAdditionalHeiht() + getAdditionalHeight();
resize(width(), h);
rollupContents->saveState(m_rollupState);
applySettings(); applySettings();
} }
@ -444,12 +451,13 @@ AISDemodGUI::AISDemodGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, Baseban
m_doApplySettings(true), m_doApplySettings(true),
m_tickCount(0) m_tickCount(0)
{ {
ui->setupUi(getRollupContents());
getRollupContents()->arrangeRollups();
m_helpURL = "plugins/channelrx/demodais/readme.md";
setAttribute(Qt::WA_DeleteOnClose, true); setAttribute(Qt::WA_DeleteOnClose, true);
connect(getRollupContents(), SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool))); m_helpURL = "plugins/channelrx/demodais/readme.md";
RollupContents *rollupContents = getRollupContents();
ui->setupUi(rollupContents);
setSizePolicy(rollupContents->sizePolicy());
rollupContents->arrangeRollups();
connect(rollupContents, SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool)));
connect(this, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(onMenuDialogCalled(const QPoint &))); connect(this, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(onMenuDialogCalled(const QPoint &)));
m_aisDemod = reinterpret_cast<AISDemod*>(rxChannel); m_aisDemod = reinterpret_cast<AISDemod*>(rxChannel);

View File

@ -725,6 +725,12 @@
<height>341</height> <height>341</height>
</rect> </rect>
</property> </property>
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="windowTitle"> <property name="windowTitle">
<string>Waveforms</string> <string>Waveforms</string>
</property> </property>
@ -890,6 +896,12 @@
</item> </item>
<item> <item>
<widget class="GLScope" name="glScope" native="true"> <widget class="GLScope" name="glScope" native="true">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize"> <property name="minimumSize">
<size> <size>
<width>200</width> <width>200</width>

View File

@ -75,7 +75,9 @@ bool AMDemodGUI::deserialize(const QByteArray& data)
void AMDemodGUI::resizeEvent(QResizeEvent* size) void AMDemodGUI::resizeEvent(QResizeEvent* size)
{ {
adjustSize(); int maxWidth = getRollupContents()->maximumWidth();
int minHeight = getRollupContents()->minimumHeight() + getRollupContents()->getAdditionalHeiht() + getAdditionalHeight();
resize(width() < maxWidth ? width() : maxWidth, minHeight);
size->accept(); size->accept();
} }
@ -266,12 +268,13 @@ AMDemodGUI::AMDemodGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, BasebandS
m_samUSB(true), m_samUSB(true),
m_tickCount(0) m_tickCount(0)
{ {
ui->setupUi(getRollupContents());
setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
getRollupContents()->arrangeRollups();
m_helpURL = "plugins/channelrx/demodam/readme.md";
setAttribute(Qt::WA_DeleteOnClose, true); setAttribute(Qt::WA_DeleteOnClose, true);
connect(getRollupContents(), SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool))); m_helpURL = "plugins/channelrx/demodam/readme.md";
RollupContents *rollupContents = getRollupContents();
ui->setupUi(rollupContents);
setSizePolicy(rollupContents->sizePolicy());
rollupContents->arrangeRollups();
connect(rollupContents, SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool)));
connect(this, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(onMenuDialogCalled(const QPoint &))); connect(this, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(onMenuDialogCalled(const QPoint &)));
m_amDemod = reinterpret_cast<AMDemod*>(rxChannel); m_amDemod = reinterpret_cast<AMDemod*>(rxChannel);

View File

@ -11,7 +11,7 @@
</rect> </rect>
</property> </property>
<property name="sizePolicy"> <property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed"> <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch> <horstretch>0</horstretch>
<verstretch>0</verstretch> <verstretch>0</verstretch>
</sizepolicy> </sizepolicy>
@ -24,7 +24,7 @@
</property> </property>
<property name="maximumSize"> <property name="maximumSize">
<size> <size>
<width>360</width> <width>560</width>
<height>153</height> <height>153</height>
</size> </size>
</property> </property>

View File

@ -542,7 +542,18 @@ void APTDemodGUI::onWidgetRolled(QWidget* widget, bool rollDown)
(void) widget; (void) widget;
(void) rollDown; (void) rollDown;
getRollupContents()->saveState(m_rollupState); RollupContents *rollupContents = getRollupContents();
if (rollupContents->hasExpandableWidgets()) {
setSizePolicy(sizePolicy().horizontalPolicy(), QSizePolicy::Expanding);
} else {
setSizePolicy(sizePolicy().horizontalPolicy(), QSizePolicy::Fixed);
}
int h = rollupContents->height() + rollupContents->getAdditionalHeiht() + getAdditionalHeight();
resize(width(), h);
rollupContents->saveState(m_rollupState);
applySettings(); applySettings();
} }
@ -605,12 +616,13 @@ APTDemodGUI::APTDemodGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, Baseban
m_scene(nullptr), m_scene(nullptr),
m_pixmapItem(nullptr) m_pixmapItem(nullptr)
{ {
ui->setupUi(getRollupContents());
getRollupContents()->arrangeRollups();
m_helpURL = "plugins/channelrx/demodapt/readme.md";
setAttribute(Qt::WA_DeleteOnClose, true); setAttribute(Qt::WA_DeleteOnClose, true);
connect(getRollupContents(), SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool))); m_helpURL = "plugins/channelrx/demodapt/readme.md";
RollupContents *rollupContents = getRollupContents();
ui->setupUi(rollupContents);
setSizePolicy(rollupContents->sizePolicy());
rollupContents->arrangeRollups();
connect(rollupContents, SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool)));
connect(this, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(onMenuDialogCalled(const QPoint &))); connect(this, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(onMenuDialogCalled(const QPoint &)));
m_aptDemod = reinterpret_cast<APTDemod*>(rxChannel); m_aptDemod = reinterpret_cast<APTDemod*>(rxChannel);

View File

@ -79,7 +79,9 @@ bool ATVDemodGUI::deserialize(const QByteArray& data)
void ATVDemodGUI::resizeEvent(QResizeEvent* size) void ATVDemodGUI::resizeEvent(QResizeEvent* size)
{ {
adjustSize(); int maxWidth = getRollupContents()->maximumWidth();
int minHeight = getRollupContents()->minimumHeight() + getRollupContents()->getAdditionalHeiht() + getAdditionalHeight();
resize(width() < maxWidth ? width() : maxWidth, minHeight);
size->accept(); size->accept();
} }
@ -275,12 +277,13 @@ ATVDemodGUI::ATVDemodGUI(PluginAPI* objPluginAPI, DeviceUISet *deviceUISet, Base
m_intTickCount(0), m_intTickCount(0),
m_basebandSampleRate(48000) m_basebandSampleRate(48000)
{ {
ui->setupUi(getRollupContents());
setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
getRollupContents()->arrangeRollups();
m_helpURL = "plugins/channelrx/demodatv/readme.md";
setAttribute(Qt::WA_DeleteOnClose, true); setAttribute(Qt::WA_DeleteOnClose, true);
connect(getRollupContents(), SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool))); m_helpURL = "plugins/channelrx/demodatv/readme.md";
RollupContents *rollupContents = getRollupContents();
ui->setupUi(rollupContents);
setSizePolicy(rollupContents->sizePolicy());
rollupContents->arrangeRollups();
connect(rollupContents, SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool)));
connect(this, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(onMenuDialogCalled(const QPoint &))); connect(this, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(onMenuDialogCalled(const QPoint &)));
m_atvDemod = (ATVDemod*) rxChannel; m_atvDemod = (ATVDemod*) rxChannel;

View File

@ -315,8 +315,18 @@ void BFMDemodGUI::onWidgetRolled(QWidget* widget, bool rollDown)
{ {
(void) widget; (void) widget;
(void) rollDown; (void) rollDown;
RollupContents *rollupContents = getRollupContents();
getRollupContents()->saveState(m_rollupState); if (rollupContents->hasExpandableWidgets()) {
setSizePolicy(sizePolicy().horizontalPolicy(), QSizePolicy::Expanding);
} else {
setSizePolicy(sizePolicy().horizontalPolicy(), QSizePolicy::Fixed);
}
int h = rollupContents->height() + rollupContents->getAdditionalHeiht() + getAdditionalHeight();
resize(width(), h);
rollupContents->saveState(m_rollupState);
applySettings(); applySettings();
} }
@ -379,9 +389,14 @@ BFMDemodGUI::BFMDemodGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, Baseban
m_radiotext_AB_flag(false), m_radiotext_AB_flag(false),
m_rate(625000) m_rate(625000)
{ {
ui->setupUi(getRollupContents()); setAttribute(Qt::WA_DeleteOnClose, true);
getRollupContents()->arrangeRollups();
m_helpURL = "plugins/channelrx/demodbfm/readme.md"; m_helpURL = "plugins/channelrx/demodbfm/readme.md";
RollupContents *rollupContents = getRollupContents();
ui->setupUi(rollupContents);
setSizePolicy(rollupContents->sizePolicy());
rollupContents->arrangeRollups();
connect(rollupContents, SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool)));
ui->deltaFrequencyLabel->setText(QString("%1f").arg(QChar(0x94, 0x03))); ui->deltaFrequencyLabel->setText(QString("%1f").arg(QChar(0x94, 0x03)));
ui->deltaFrequency->setColorMapper(ColorMapper(ColorMapper::GrayGold)); ui->deltaFrequency->setColorMapper(ColorMapper(ColorMapper::GrayGold));
ui->deltaFrequency->setValueRange(false, 8, -99999999, 99999999); ui->deltaFrequency->setValueRange(false, 8, -99999999, 99999999);
@ -390,8 +405,6 @@ BFMDemodGUI::BFMDemodGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, Baseban
CRightClickEnabler *audioMuteRightClickEnabler = new CRightClickEnabler(ui->audioStereo); CRightClickEnabler *audioMuteRightClickEnabler = new CRightClickEnabler(ui->audioStereo);
connect(audioMuteRightClickEnabler, SIGNAL(rightClick(const QPoint &)), this, SLOT(audioSelect())); connect(audioMuteRightClickEnabler, SIGNAL(rightClick(const QPoint &)), this, SLOT(audioSelect()));
setAttribute(Qt::WA_DeleteOnClose, true);
connect(getRollupContents(), SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool)));
connect(this, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(onMenuDialogCalled(const QPoint &))); connect(this, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(onMenuDialogCalled(const QPoint &)));
connect(getInputMessageQueue(), SIGNAL(messageEnqueued()), this, SLOT(handleInputMessages())); connect(getInputMessageQueue(), SIGNAL(messageEnqueued()), this, SLOT(handleInputMessages()));

View File

@ -6,7 +6,7 @@
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>798</width> <width>644</width>
<height>755</height> <height>755</height>
</rect> </rect>
</property> </property>
@ -18,7 +18,7 @@
</property> </property>
<property name="minimumSize"> <property name="minimumSize">
<size> <size>
<width>642</width> <width>644</width>
<height>670</height> <height>670</height>
</size> </size>
</property> </property>
@ -40,8 +40,8 @@
<widget class="QWidget" name="settingsContainer" native="true"> <widget class="QWidget" name="settingsContainer" native="true">
<property name="geometry"> <property name="geometry">
<rect> <rect>
<x>10</x> <x>0</x>
<y>20</y> <y>0</y>
<width>642</width> <width>642</width>
<height>151</height> <height>151</height>
</rect> </rect>
@ -57,19 +57,19 @@
</property> </property>
<layout class="QVBoxLayout" name="verticalLayout"> <layout class="QVBoxLayout" name="verticalLayout">
<property name="spacing"> <property name="spacing">
<number>3</number> <number>1</number>
</property> </property>
<property name="leftMargin"> <property name="leftMargin">
<number>2</number> <number>0</number>
</property> </property>
<property name="topMargin"> <property name="topMargin">
<number>2</number> <number>0</number>
</property> </property>
<property name="rightMargin"> <property name="rightMargin">
<number>2</number> <number>0</number>
</property> </property>
<property name="bottomMargin"> <property name="bottomMargin">
<number>2</number> <number>0</number>
</property> </property>
<item> <item>
<layout class="QHBoxLayout" name="deltaFreqPowLayout"> <layout class="QHBoxLayout" name="deltaFreqPowLayout">
@ -502,10 +502,10 @@
<widget class="QWidget" name="spectrumBox" native="true"> <widget class="QWidget" name="spectrumBox" native="true">
<property name="geometry"> <property name="geometry">
<rect> <rect>
<x>10</x> <x>0</x>
<y>560</y> <y>460</y>
<width>311</width> <width>640</width>
<height>151</height> <height>210</height>
</rect> </rect>
</property> </property>
<property name="sizePolicy"> <property name="sizePolicy">
@ -514,24 +514,30 @@
<verstretch>0</verstretch> <verstretch>0</verstretch>
</sizepolicy> </sizepolicy>
</property> </property>
<property name="minimumSize">
<size>
<width>640</width>
<height>0</height>
</size>
</property>
<property name="windowTitle"> <property name="windowTitle">
<string>Baseband Spectrum</string> <string>Baseband Spectrum</string>
</property> </property>
<layout class="QVBoxLayout" name="verticalLayout_2"> <layout class="QVBoxLayout" name="verticalLayout_2">
<property name="spacing"> <property name="spacing">
<number>3</number> <number>1</number>
</property> </property>
<property name="leftMargin"> <property name="leftMargin">
<number>2</number> <number>0</number>
</property> </property>
<property name="topMargin"> <property name="topMargin">
<number>2</number> <number>0</number>
</property> </property>
<property name="rightMargin"> <property name="rightMargin">
<number>2</number> <number>0</number>
</property> </property>
<property name="bottomMargin"> <property name="bottomMargin">
<number>2</number> <number>0</number>
</property> </property>
<item> <item>
<widget class="GLSpectrum" name="glSpectrum" native="true"> <widget class="GLSpectrum" name="glSpectrum" native="true">
@ -541,6 +547,12 @@
<verstretch>0</verstretch> <verstretch>0</verstretch>
</sizepolicy> </sizepolicy>
</property> </property>
<property name="minimumSize">
<size>
<width>640</width>
<height>200</height>
</size>
</property>
<property name="font"> <property name="font">
<font> <font>
<family>Liberation Mono</family> <family>Liberation Mono</family>
@ -552,7 +564,7 @@
<item> <item>
<widget class="GLSpectrumGUI" name="spectrumGUI" native="true"> <widget class="GLSpectrumGUI" name="spectrumGUI" native="true">
<property name="sizePolicy"> <property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Minimum"> <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>0</horstretch> <horstretch>0</horstretch>
<verstretch>0</verstretch> <verstretch>0</verstretch>
</sizepolicy> </sizepolicy>
@ -564,9 +576,9 @@
<widget class="QWidget" name="rdsContainer" native="true"> <widget class="QWidget" name="rdsContainer" native="true">
<property name="geometry"> <property name="geometry">
<rect> <rect>
<x>10</x> <x>0</x>
<y>170</y> <y>160</y>
<width>791</width> <width>640</width>
<height>281</height> <height>281</height>
</rect> </rect>
</property> </property>
@ -583,6 +595,18 @@
<property name="spacing"> <property name="spacing">
<number>1</number> <number>1</number>
</property> </property>
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item> <item>
<layout class="QHBoxLayout" name="reportLayout"> <layout class="QHBoxLayout" name="reportLayout">
<item> <item>

View File

@ -329,7 +329,18 @@ void ChirpChatDemodGUI::onWidgetRolled(QWidget* widget, bool rollDown)
(void) widget; (void) widget;
(void) rollDown; (void) rollDown;
getRollupContents()->saveState(m_rollupState); RollupContents *rollupContents = getRollupContents();
if (rollupContents->hasExpandableWidgets()) {
setSizePolicy(sizePolicy().horizontalPolicy(), QSizePolicy::Expanding);
} else {
setSizePolicy(sizePolicy().horizontalPolicy(), QSizePolicy::Fixed);
}
int h = rollupContents->height() + rollupContents->getAdditionalHeiht() + getAdditionalHeight();
resize(width(), h);
rollupContents->saveState(m_rollupState);
applySettings(); applySettings();
} }
@ -391,11 +402,13 @@ ChirpChatDemodGUI::ChirpChatDemodGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUI
m_doApplySettings(true), m_doApplySettings(true),
m_tickCount(0) m_tickCount(0)
{ {
ui->setupUi(getRollupContents());
getRollupContents()->arrangeRollups();
m_helpURL = "plugins/channelrx/demodchirpchat/readme.md";
setAttribute(Qt::WA_DeleteOnClose, true); setAttribute(Qt::WA_DeleteOnClose, true);
connect(getRollupContents(), SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool))); m_helpURL = "plugins/channelrx/demodchirpchat/readme.md";
RollupContents *rollupContents = getRollupContents();
ui->setupUi(rollupContents);
setSizePolicy(rollupContents->sizePolicy());
rollupContents->arrangeRollups();
connect(rollupContents, SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool)));
connect(this, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(onMenuDialogCalled(const QPoint &))); connect(this, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(onMenuDialogCalled(const QPoint &)));
m_chirpChatDemod = (ChirpChatDemod*) rxChannel; m_chirpChatDemod = (ChirpChatDemod*) rxChannel;

View File

@ -392,7 +392,18 @@ void DABDemodGUI::onWidgetRolled(QWidget* widget, bool rollDown)
(void) widget; (void) widget;
(void) rollDown; (void) rollDown;
getRollupContents()->saveState(m_rollupState); RollupContents *rollupContents = getRollupContents();
if (rollupContents->hasExpandableWidgets()) {
setSizePolicy(sizePolicy().horizontalPolicy(), QSizePolicy::Expanding);
} else {
setSizePolicy(sizePolicy().horizontalPolicy(), QSizePolicy::Fixed);
}
int h = rollupContents->height() + rollupContents->getAdditionalHeiht() + getAdditionalHeight();
resize(width(), h);
rollupContents->saveState(m_rollupState);
applySettings(); applySettings();
} }
@ -454,12 +465,13 @@ DABDemodGUI::DABDemodGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, Baseban
m_tickCount(0), m_tickCount(0),
m_channelFreq(0.0) m_channelFreq(0.0)
{ {
ui->setupUi(getRollupContents());
getRollupContents()->arrangeRollups();
m_helpURL = "plugins/channelrx/demoddab/readme.md";
setAttribute(Qt::WA_DeleteOnClose, true); setAttribute(Qt::WA_DeleteOnClose, true);
connect(getRollupContents(), SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool))); m_helpURL = "plugins/channelrx/demoddab/readme.md";
RollupContents *rollupContents = getRollupContents();
ui->setupUi(rollupContents);
setSizePolicy(rollupContents->sizePolicy());
rollupContents->arrangeRollups();
connect(rollupContents, SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool)));
connect(this, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(onMenuDialogCalled(const QPoint &))); connect(this, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(onMenuDialogCalled(const QPoint &)));
m_dabDemod = reinterpret_cast<DABDemod*>(rxChannel); m_dabDemod = reinterpret_cast<DABDemod*>(rxChannel);

View File

@ -220,14 +220,17 @@ DATVDemodGUI::DATVDemodGUI(PluginAPI* objPluginAPI, DeviceUISet *deviceUISet, Ba
m_modcodCodeRateIndex(-1), m_modcodCodeRateIndex(-1),
m_cstlnSetByModcod(false) m_cstlnSetByModcod(false)
{ {
ui->setupUi(getRollupContents()); setAttribute(Qt::WA_DeleteOnClose, true);
setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
getRollupContents()->arrangeRollups();
m_helpURL = "plugins/channelrx/demoddatv/readme.md"; m_helpURL = "plugins/channelrx/demoddatv/readme.md";
RollupContents *rollupContents = getRollupContents();
ui->setupUi(rollupContents);
setSizePolicy(rollupContents->sizePolicy());
rollupContents->arrangeRollups();
connect(rollupContents, SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool)));
ui->screenTV->setColor(true); ui->screenTV->setColor(true);
ui->screenTV->resizeTVScreen(256,256); ui->screenTV->resizeTVScreen(256,256);
setAttribute(Qt::WA_DeleteOnClose, true);
connect(getRollupContents(), SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool)));
connect(this, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(onMenuDialogCalled(const QPoint &))); connect(this, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(onMenuDialogCalled(const QPoint &)));
connect(getInputMessageQueue(), SIGNAL(messageEnqueued()), this, SLOT(handleInputMessages())); connect(getInputMessageQueue(), SIGNAL(messageEnqueued()), this, SLOT(handleInputMessages()));
@ -311,7 +314,8 @@ DATVDemodGUI::DATVDemodGUI(PluginAPI* objPluginAPI, DeviceUISet *deviceUISet, Ba
DATVDemodGUI::~DATVDemodGUI() DATVDemodGUI::~DATVDemodGUI()
{ {
ui->screenTV->setParent(nullptr); // Prefer memory leak to core dump... ~TVScreen() is buggy ui->screenTV->setParent(nullptr); // Prefer memory leak to core dump... ~TVScreen() is buggy
ui->screenTV_2->setParent(nullptr); // idem
delete ui; delete ui;
} }

View File

@ -85,7 +85,9 @@ bool DSDDemodGUI::deserialize(const QByteArray& data)
void DSDDemodGUI::resizeEvent(QResizeEvent* size) void DSDDemodGUI::resizeEvent(QResizeEvent* size)
{ {
adjustSize(); int maxWidth = getRollupContents()->maximumWidth();
int minHeight = getRollupContents()->minimumHeight() + getRollupContents()->getAdditionalHeiht() + getAdditionalHeight();
resize(width() < maxWidth ? width() : maxWidth, minHeight);
size->accept(); size->accept();
} }
@ -343,15 +345,17 @@ DSDDemodGUI::DSDDemodGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, Baseban
m_tickCount(0), m_tickCount(0),
m_dsdStatusTextDialog(0) m_dsdStatusTextDialog(0)
{ {
ui->setupUi(getRollupContents()); setAttribute(Qt::WA_DeleteOnClose, true);
setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
getRollupContents()->arrangeRollups();
m_helpURL = "plugins/channelrx/demoddsd/readme.md"; m_helpURL = "plugins/channelrx/demoddsd/readme.md";
RollupContents *rollupContents = getRollupContents();
ui->setupUi(rollupContents);
setSizePolicy(rollupContents->sizePolicy());
rollupContents->arrangeRollups();
connect(rollupContents, SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool)));
ui->screenTV->setColor(true); ui->screenTV->setColor(true);
ui->screenTV->resizeTVScreen(200,200); ui->screenTV->resizeTVScreen(200,200);
setAttribute(Qt::WA_DeleteOnClose, true);
connect(getRollupContents(), SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool)));
connect(this, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(onMenuDialogCalled(const QPoint &))); connect(this, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(onMenuDialogCalled(const QPoint &)));
connect(getInputMessageQueue(), SIGNAL(messageEnqueued()), this, SLOT(handleInputMessages())); connect(getInputMessageQueue(), SIGNAL(messageEnqueued()), this, SLOT(handleInputMessages()));

View File

@ -248,7 +248,18 @@ void FreeDVDemodGUI::onWidgetRolled(QWidget* widget, bool rollDown)
(void) widget; (void) widget;
(void) rollDown; (void) rollDown;
getRollupContents()->saveState(m_rollupState); RollupContents *rollupContents = getRollupContents();
if (rollupContents->hasExpandableWidgets()) {
setSizePolicy(sizePolicy().horizontalPolicy(), QSizePolicy::Expanding);
} else {
setSizePolicy(sizePolicy().horizontalPolicy(), QSizePolicy::Fixed);
}
int h = rollupContents->height() + rollupContents->getAdditionalHeiht() + getAdditionalHeight();
resize(width(), h);
rollupContents->saveState(m_rollupState);
applySettings(); applySettings();
} }
@ -268,11 +279,13 @@ FreeDVDemodGUI::FreeDVDemodGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, B
m_squelchOpen(false), m_squelchOpen(false),
m_audioSampleRate(-1) m_audioSampleRate(-1)
{ {
ui->setupUi(getRollupContents());
getRollupContents()->arrangeRollups();
m_helpURL = "plugins/channelrx/demodfreedv/readme.md";
setAttribute(Qt::WA_DeleteOnClose, true); setAttribute(Qt::WA_DeleteOnClose, true);
connect(getRollupContents(), SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool))); m_helpURL = "plugins/channelrx/demodfreedv/readme.md";
RollupContents *rollupContents = getRollupContents();
ui->setupUi(rollupContents);
setSizePolicy(rollupContents->sizePolicy());
rollupContents->arrangeRollups();
connect(rollupContents, SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool)));
connect(this, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(onMenuDialogCalled(const QPoint &))); connect(this, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(onMenuDialogCalled(const QPoint &)));
m_freeDVDemod = (FreeDVDemod*) rxChannel; m_freeDVDemod = (FreeDVDemod*) rxChannel;

View File

@ -58,7 +58,9 @@ bool NFMDemodGUI::deserialize(const QByteArray& data)
void NFMDemodGUI::resizeEvent(QResizeEvent* size) void NFMDemodGUI::resizeEvent(QResizeEvent* size)
{ {
adjustSize(); int maxWidth = getRollupContents()->maximumWidth();
int minHeight = getRollupContents()->minimumHeight() + getRollupContents()->getAdditionalHeiht() + getAdditionalHeight();
resize(width() < maxWidth ? width() : maxWidth, minHeight);
size->accept(); size->accept();
} }
@ -366,13 +368,13 @@ NFMDemodGUI::NFMDemodGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, Baseban
m_dcsShowPositive(false), m_dcsShowPositive(false),
m_tickCount(0) m_tickCount(0)
{ {
ui->setupUi(getRollupContents());
setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
getRollupContents()->arrangeRollups();
m_helpURL = "plugins/channelrx/demodnfm/readme.md";
setAttribute(Qt::WA_DeleteOnClose, true); setAttribute(Qt::WA_DeleteOnClose, true);
m_helpURL = "plugins/channelrx/demodnfm/readme.md";
connect(getRollupContents(), SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool))); RollupContents *rollupContents = getRollupContents();
ui->setupUi(rollupContents);
setSizePolicy(rollupContents->sizePolicy());
rollupContents->arrangeRollups();
connect(rollupContents, SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool)));
connect(this, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(onMenuDialogCalled(const QPoint &))); connect(this, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(onMenuDialogCalled(const QPoint &)));
m_nfmDemod = reinterpret_cast<NFMDemod*>(rxChannel); m_nfmDemod = reinterpret_cast<NFMDemod*>(rxChannel);

View File

@ -11,7 +11,7 @@
</rect> </rect>
</property> </property>
<property name="sizePolicy"> <property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed"> <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch> <horstretch>0</horstretch>
<verstretch>0</verstretch> <verstretch>0</verstretch>
</sizepolicy> </sizepolicy>
@ -24,7 +24,7 @@
</property> </property>
<property name="maximumSize"> <property name="maximumSize">
<size> <size>
<width>360</width> <width>560</width>
<height>197</height> <height>197</height>
</size> </size>
</property> </property>

View File

@ -374,7 +374,18 @@ void PacketDemodGUI::onWidgetRolled(QWidget* widget, bool rollDown)
(void) widget; (void) widget;
(void) rollDown; (void) rollDown;
getRollupContents()->saveState(m_rollupState); RollupContents *rollupContents = getRollupContents();
if (rollupContents->hasExpandableWidgets()) {
setSizePolicy(sizePolicy().horizontalPolicy(), QSizePolicy::Expanding);
} else {
setSizePolicy(sizePolicy().horizontalPolicy(), QSizePolicy::Fixed);
}
int h = rollupContents->height() + rollupContents->getAdditionalHeiht() + getAdditionalHeight();
resize(width(), h);
rollupContents->saveState(m_rollupState);
applySettings(); applySettings();
} }
@ -435,12 +446,13 @@ PacketDemodGUI::PacketDemodGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, B
m_doApplySettings(true), m_doApplySettings(true),
m_tickCount(0) m_tickCount(0)
{ {
ui->setupUi(getRollupContents());
getRollupContents()->arrangeRollups();
m_helpURL = "plugins/channelrx/demodpacket/readme.md";
setAttribute(Qt::WA_DeleteOnClose, true); setAttribute(Qt::WA_DeleteOnClose, true);
connect(getRollupContents(), SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool))); m_helpURL = "plugins/channelrx/demodpacket/readme.md";
RollupContents *rollupContents = getRollupContents();
ui->setupUi(rollupContents);
setSizePolicy(rollupContents->sizePolicy());
rollupContents->arrangeRollups();
connect(rollupContents, SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool)));
connect(this, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(onMenuDialogCalled(const QPoint &))); connect(this, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(onMenuDialogCalled(const QPoint &)));
m_packetDemod = reinterpret_cast<PacketDemod*>(rxChannel); m_packetDemod = reinterpret_cast<PacketDemod*>(rxChannel);

View File

@ -420,18 +420,25 @@ void PagerDemodGUI::onWidgetRolled(QWidget* widget, bool rollDown)
{ {
if (widget == ui->scopeContainer) if (widget == ui->scopeContainer)
{ {
if (rollDown) if (rollDown) {
{ setMinimumWidth(716); // Make wide enough for scope controls
// Make wide enough for scope controls } else {
setMinimumWidth(716);
}
else
{
setMinimumWidth(352); setMinimumWidth(352);
} }
} }
getRollupContents()->saveState(m_rollupState); RollupContents *rollupContents = getRollupContents();
if (rollupContents->hasExpandableWidgets()) {
setSizePolicy(sizePolicy().horizontalPolicy(), QSizePolicy::Expanding);
} else {
setSizePolicy(sizePolicy().horizontalPolicy(), QSizePolicy::Fixed);
}
int h = rollupContents->height() + rollupContents->getAdditionalHeiht() + getAdditionalHeight();
resize(width(), h);
rollupContents->saveState(m_rollupState);
applySettings(); applySettings();
} }
@ -493,12 +500,13 @@ PagerDemodGUI::PagerDemodGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, Bas
m_doApplySettings(true), m_doApplySettings(true),
m_tickCount(0) m_tickCount(0)
{ {
ui->setupUi(getRollupContents());
getRollupContents()->arrangeRollups();
m_helpURL = "plugins/channelrx/demodpager/readme.md";
setAttribute(Qt::WA_DeleteOnClose, true); setAttribute(Qt::WA_DeleteOnClose, true);
connect(getRollupContents(), SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool))); m_helpURL = "plugins/channelrx/demodpager/readme.md";
RollupContents *rollupContents = getRollupContents();
ui->setupUi(rollupContents);
setSizePolicy(rollupContents->sizePolicy());
rollupContents->arrangeRollups();
connect(rollupContents, SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool)));
connect(this, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(onMenuDialogCalled(const QPoint &))); connect(this, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(onMenuDialogCalled(const QPoint &)));
m_pagerDemod = reinterpret_cast<PagerDemod*>(rxChannel); m_pagerDemod = reinterpret_cast<PagerDemod*>(rxChannel);

View File

@ -477,17 +477,24 @@ void RadiosondeDemodGUI::onWidgetRolled(QWidget* widget, bool rollDown)
{ {
if (widget == ui->scopeContainer) if (widget == ui->scopeContainer)
{ {
if (rollDown) if (rollDown) {
{ setMinimumWidth(716); // Make wide enough for scope controls
// Make wide enough for scope controls } else {
setMinimumWidth(716);
}
else
{
setMinimumWidth(352); setMinimumWidth(352);
} }
} }
RollupContents *rollupContents = getRollupContents();
if (rollupContents->hasExpandableWidgets()) {
setSizePolicy(sizePolicy().horizontalPolicy(), QSizePolicy::Expanding);
} else {
setSizePolicy(sizePolicy().horizontalPolicy(), QSizePolicy::Fixed);
}
int h = rollupContents->height() + rollupContents->getAdditionalHeiht() + getAdditionalHeight();
resize(width(), h);
getRollupContents()->saveState(m_rollupState); getRollupContents()->saveState(m_rollupState);
applySettings(); applySettings();
} }
@ -550,12 +557,13 @@ RadiosondeDemodGUI::RadiosondeDemodGUI(PluginAPI* pluginAPI, DeviceUISet *device
m_doApplySettings(true), m_doApplySettings(true),
m_tickCount(0) m_tickCount(0)
{ {
ui->setupUi(getRollupContents());
getRollupContents()->arrangeRollups();
m_helpURL = "plugins/channelrx/demodradiosonde/readme.md";
setAttribute(Qt::WA_DeleteOnClose, true); setAttribute(Qt::WA_DeleteOnClose, true);
connect(getRollupContents(), SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool))); m_helpURL = "plugins/channelrx/demodradiosonde/readme.md";
RollupContents *rollupContents = getRollupContents();
ui->setupUi(rollupContents);
setSizePolicy(rollupContents->sizePolicy());
rollupContents->arrangeRollups();
connect(rollupContents, SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool)));
connect(this, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(onMenuDialogCalled(const QPoint &))); connect(this, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(onMenuDialogCalled(const QPoint &)));
m_radiosondeDemod = reinterpret_cast<RadiosondeDemod*>(rxChannel); m_radiosondeDemod = reinterpret_cast<RadiosondeDemod*>(rxChannel);

View File

@ -288,7 +288,18 @@ void SSBDemodGUI::onWidgetRolled(QWidget* widget, bool rollDown)
(void) widget; (void) widget;
(void) rollDown; (void) rollDown;
getRollupContents()->saveState(m_rollupState); RollupContents *rollupContents = getRollupContents();
if (rollupContents->hasExpandableWidgets()) {
setSizePolicy(sizePolicy().horizontalPolicy(), QSizePolicy::Expanding);
} else {
setSizePolicy(sizePolicy().horizontalPolicy(), QSizePolicy::Fixed);
}
int h = rollupContents->height() + rollupContents->getAdditionalHeiht() + getAdditionalHeight();
resize(width(), h);
rollupContents->saveState(m_rollupState);
applySettings(); applySettings();
} }
@ -308,11 +319,13 @@ SSBDemodGUI::SSBDemodGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, Baseban
m_squelchOpen(false), m_squelchOpen(false),
m_audioSampleRate(-1) m_audioSampleRate(-1)
{ {
ui->setupUi(getRollupContents());
getRollupContents()->arrangeRollups();
m_helpURL = "plugins/channelrx/demodssb/readme.md";
setAttribute(Qt::WA_DeleteOnClose, true); setAttribute(Qt::WA_DeleteOnClose, true);
connect(getRollupContents(), SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool))); m_helpURL = "plugins/channelrx/demodssb/readme.md";
RollupContents *rollupContents = getRollupContents();
ui->setupUi(rollupContents);
setSizePolicy(rollupContents->sizePolicy());
rollupContents->arrangeRollups();
connect(rollupContents, SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool)));
connect(this, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(onMenuDialogCalled(const QPoint &))); connect(this, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(onMenuDialogCalled(const QPoint &)));
m_ssbDemod = (SSBDemod*) rxChannel; m_ssbDemod = (SSBDemod*) rxChannel;

View File

@ -57,7 +57,9 @@ bool WFMDemodGUI::deserialize(const QByteArray& data)
void WFMDemodGUI::resizeEvent(QResizeEvent* size) void WFMDemodGUI::resizeEvent(QResizeEvent* size)
{ {
adjustSize(); int maxWidth = getRollupContents()->maximumWidth();
int minHeight = getRollupContents()->minimumHeight() + getRollupContents()->getAdditionalHeiht() + getAdditionalHeight();
resize(width() < maxWidth ? width() : maxWidth, minHeight);
size->accept(); size->accept();
} }
@ -224,12 +226,13 @@ WFMDemodGUI::WFMDemodGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, Baseban
m_squelchOpen(false), m_squelchOpen(false),
m_audioSampleRate(-1) m_audioSampleRate(-1)
{ {
ui->setupUi(getRollupContents());
setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
getRollupContents()->arrangeRollups();
m_helpURL = "plugins/channelrx/demodwfm/readme.md";
setAttribute(Qt::WA_DeleteOnClose, true); setAttribute(Qt::WA_DeleteOnClose, true);
connect(getRollupContents(), SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool))); m_helpURL = "plugins/channelrx/demodwfm/readme.md";
RollupContents *rollupContents = getRollupContents();
ui->setupUi(rollupContents);
setSizePolicy(rollupContents->sizePolicy());
rollupContents->arrangeRollups();
connect(rollupContents, SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool)));
connect(this, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(onMenuDialogCalled(const QPoint &))); connect(this, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(onMenuDialogCalled(const QPoint &)));
connect(getInputMessageQueue(), SIGNAL(messageEnqueued()), this, SLOT(handleInputMessages())); connect(getInputMessageQueue(), SIGNAL(messageEnqueued()), this, SLOT(handleInputMessages()));

View File

@ -11,7 +11,7 @@
</rect> </rect>
</property> </property>
<property name="sizePolicy"> <property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed"> <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch> <horstretch>0</horstretch>
<verstretch>0</verstretch> <verstretch>0</verstretch>
</sizepolicy> </sizepolicy>
@ -24,7 +24,7 @@
</property> </property>
<property name="maximumSize"> <property name="maximumSize">
<size> <size>
<width>302</width> <width>560</width>
<height>170</height> <height>170</height>
</size> </size>
</property> </property>
@ -52,12 +52,6 @@
<height>0</height> <height>0</height>
</size> </size>
</property> </property>
<property name="maximumSize">
<size>
<width>300</width>
<height>16777215</height>
</size>
</property>
<property name="windowTitle"> <property name="windowTitle">
<string>Settings</string> <string>Settings</string>
</property> </property>

View File

@ -189,11 +189,13 @@ FileSinkGUI::FileSinkGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, Baseban
m_fixedPosition(false), m_fixedPosition(false),
m_tickCount(0) m_tickCount(0)
{ {
ui->setupUi(getRollupContents());
getRollupContents()->arrangeRollups();
m_helpURL = "plugins/channelrx/filesink/readme.md";
setAttribute(Qt::WA_DeleteOnClose, true); setAttribute(Qt::WA_DeleteOnClose, true);
connect(getRollupContents(), SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool))); m_helpURL = "plugins/channelrx/filesink/readme.md";
RollupContents *rollupContents = getRollupContents();
ui->setupUi(rollupContents);
setSizePolicy(rollupContents->sizePolicy());
rollupContents->arrangeRollups();
connect(rollupContents, SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool)));
connect(this, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(onMenuDialogCalled(const QPoint &))); connect(this, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(onMenuDialogCalled(const QPoint &)));
m_fileSink = (FileSink*) channelrx; m_fileSink = (FileSink*) channelrx;
@ -350,7 +352,18 @@ void FileSinkGUI::onWidgetRolled(QWidget* widget, bool rollDown)
(void) widget; (void) widget;
(void) rollDown; (void) rollDown;
getRollupContents()->saveState(m_rollupState); RollupContents *rollupContents = getRollupContents();
if (rollupContents->hasExpandableWidgets()) {
setSizePolicy(sizePolicy().horizontalPolicy(), QSizePolicy::Expanding);
} else {
setSizePolicy(sizePolicy().horizontalPolicy(), QSizePolicy::Fixed);
}
int h = rollupContents->height() + rollupContents->getAdditionalHeiht() + getAdditionalHeight();
resize(width(), h);
rollupContents->saveState(m_rollupState);
applySettings(); applySettings();
} }

View File

@ -256,7 +256,18 @@ void FreqTrackerGUI::onWidgetRolled(QWidget* widget, bool rollDown)
(void) widget; (void) widget;
(void) rollDown; (void) rollDown;
getRollupContents()->saveState(m_rollupState); RollupContents *rollupContents = getRollupContents();
if (rollupContents->hasExpandableWidgets()) {
setSizePolicy(sizePolicy().horizontalPolicy(), QSizePolicy::Expanding);
} else {
setSizePolicy(sizePolicy().horizontalPolicy(), QSizePolicy::Fixed);
}
int h = rollupContents->height() + rollupContents->getAdditionalHeiht() + getAdditionalHeight();
resize(width(), h);
rollupContents->saveState(m_rollupState);
applySettings(); applySettings();
} }
@ -320,11 +331,13 @@ FreqTrackerGUI::FreqTrackerGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, B
m_squelchOpen(false), m_squelchOpen(false),
m_tickCount(0) m_tickCount(0)
{ {
ui->setupUi(getRollupContents());
getRollupContents()->arrangeRollups();
m_helpURL = "plugins/channelrx/freqtracker/readme.md";
setAttribute(Qt::WA_DeleteOnClose, true); setAttribute(Qt::WA_DeleteOnClose, true);
connect(getRollupContents(), SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool))); m_helpURL = "plugins/channelrx/freqtracker/readme.md";
RollupContents *rollupContents = getRollupContents();
ui->setupUi(rollupContents);
setSizePolicy(rollupContents->sizePolicy());
rollupContents->arrangeRollups();
connect(rollupContents, SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool)));
connect(this, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(onMenuDialogCalled(const QPoint &))); connect(this, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(onMenuDialogCalled(const QPoint &)));
m_freqTracker = reinterpret_cast<FreqTracker*>(rxChannel); m_freqTracker = reinterpret_cast<FreqTracker*>(rxChannel);

View File

@ -537,7 +537,18 @@ void NoiseFigureGUI::onWidgetRolled(QWidget* widget, bool rollDown)
(void) widget; (void) widget;
(void) rollDown; (void) rollDown;
getRollupContents()->saveState(m_rollupState); RollupContents *rollupContents = getRollupContents();
if (rollupContents->hasExpandableWidgets()) {
setSizePolicy(sizePolicy().horizontalPolicy(), QSizePolicy::Expanding);
} else {
setSizePolicy(sizePolicy().horizontalPolicy(), QSizePolicy::Fixed);
}
int h = rollupContents->height() + rollupContents->getAdditionalHeiht() + getAdditionalHeight();
resize(width(), h);
rollupContents->saveState(m_rollupState);
applySettings(); applySettings();
} }
@ -601,12 +612,13 @@ NoiseFigureGUI::NoiseFigureGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, B
m_runningTest(false), m_runningTest(false),
m_chart(nullptr) m_chart(nullptr)
{ {
ui->setupUi(getRollupContents());
getRollupContents()->arrangeRollups();
m_helpURL = "plugins/channelrx/noisefigure/readme.md";
setAttribute(Qt::WA_DeleteOnClose, true); setAttribute(Qt::WA_DeleteOnClose, true);
connect(getRollupContents(), SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool))); m_helpURL = "plugins/channelrx/noisefigure/readme.md";
RollupContents *rollupContents = getRollupContents();
ui->setupUi(rollupContents);
setSizePolicy(rollupContents->sizePolicy());
rollupContents->arrangeRollups();
connect(rollupContents, SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool)));
connect(this, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(onMenuDialogCalled(const QPoint &))); connect(this, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(onMenuDialogCalled(const QPoint &)));
m_noiseFigure = reinterpret_cast<NoiseFigure*>(rxChannel); m_noiseFigure = reinterpret_cast<NoiseFigure*>(rxChannel);

View File

@ -1949,7 +1949,18 @@ void RadioAstronomyGUI::onWidgetRolled(QWidget* widget, bool rollDown)
(void) widget; (void) widget;
(void) rollDown; (void) rollDown;
getRollupContents()->saveState(m_rollupState); RollupContents *rollupContents = getRollupContents();
if (rollupContents->hasExpandableWidgets()) {
setSizePolicy(sizePolicy().horizontalPolicy(), QSizePolicy::Expanding);
} else {
setSizePolicy(sizePolicy().horizontalPolicy(), QSizePolicy::Fixed);
}
int h = rollupContents->height() + rollupContents->getAdditionalHeiht() + getAdditionalHeight();
resize(width(), h);
rollupContents->saveState(m_rollupState);
applySettings(); applySettings();
} }
@ -2062,12 +2073,13 @@ RadioAstronomyGUI::RadioAstronomyGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUI
m_bLAB(0.0f), m_bLAB(0.0f),
m_downloadingLAB(false) m_downloadingLAB(false)
{ {
qDebug("RadioAstronomyGUI::RadioAstronomyGUI");
ui->setupUi(getRollupContents());
getRollupContents()->arrangeRollups();
setAttribute(Qt::WA_DeleteOnClose, true); setAttribute(Qt::WA_DeleteOnClose, true);
connect(getRollupContents(), SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool))); qDebug("RadioAstronomyGUI::RadioAstronomyGUI");
RollupContents *rollupContents = getRollupContents();
ui->setupUi(rollupContents);
setSizePolicy(rollupContents->sizePolicy());
rollupContents->arrangeRollups();
connect(rollupContents, SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool)));
connect(this, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(onMenuDialogCalled(const QPoint &))); connect(this, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(onMenuDialogCalled(const QPoint &)));
m_radioAstronomy = reinterpret_cast<RadioAstronomy*>(rxChannel); m_radioAstronomy = reinterpret_cast<RadioAstronomy*>(rxChannel);

View File

@ -211,18 +211,25 @@ void RadioClockGUI::onWidgetRolled(QWidget* widget, bool rollDown)
{ {
if (widget == ui->scopeContainer) if (widget == ui->scopeContainer)
{ {
if (rollDown) if (rollDown) {
{ setMinimumWidth(716); // Make wide enough for scope controls
// Make wide enough for scope controls } else {
setMinimumWidth(716);
}
else
{
setMinimumWidth(352); setMinimumWidth(352);
} }
} }
getRollupContents()->saveState(m_rollupState); RollupContents *rollupContents = getRollupContents();
if (rollupContents->hasExpandableWidgets()) {
setSizePolicy(sizePolicy().horizontalPolicy(), QSizePolicy::Expanding);
} else {
setSizePolicy(sizePolicy().horizontalPolicy(), QSizePolicy::Fixed);
}
int h = rollupContents->height() + rollupContents->getAdditionalHeiht() + getAdditionalHeight();
resize(width(), h);
rollupContents->saveState(m_rollupState);
applySettings(); applySettings();
} }
@ -284,12 +291,13 @@ RadioClockGUI::RadioClockGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, Bas
m_doApplySettings(true), m_doApplySettings(true),
m_tickCount(0) m_tickCount(0)
{ {
ui->setupUi(getRollupContents());
getRollupContents()->arrangeRollups();
m_helpURL = "plugins/channelrx/radioclock/readme.md";
setAttribute(Qt::WA_DeleteOnClose, true); setAttribute(Qt::WA_DeleteOnClose, true);
connect(getRollupContents(), SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool))); m_helpURL = "plugins/channelrx/radioclock/readme.md";
RollupContents *rollupContents = getRollupContents();
ui->setupUi(rollupContents);
setSizePolicy(rollupContents->sizePolicy());
rollupContents->arrangeRollups();
connect(rollupContents, SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool)));
m_radioClock = reinterpret_cast<RadioClock*>(rxChannel); m_radioClock = reinterpret_cast<RadioClock*>(rxChannel);
m_radioClock->setMessageQueueToGUI(getInputMessageQueue()); m_radioClock->setMessageQueueToGUI(getInputMessageQueue());

View File

@ -175,11 +175,13 @@ SigMFFileSinkGUI::SigMFFileSinkGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISe
m_fixedPosition(false), m_fixedPosition(false),
m_tickCount(0) m_tickCount(0)
{ {
ui->setupUi(getRollupContents());
getRollupContents()->arrangeRollups();
m_helpURL = "plugins/channelrx/sigmffilesink/readme.md";
setAttribute(Qt::WA_DeleteOnClose, true); setAttribute(Qt::WA_DeleteOnClose, true);
connect(getRollupContents(), SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool))); m_helpURL = "plugins/channelrx/sigmffilesink/readme.md";
RollupContents *rollupContents = getRollupContents();
ui->setupUi(rollupContents);
setSizePolicy(rollupContents->sizePolicy());
rollupContents->arrangeRollups();
connect(rollupContents, SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool)));
connect(this, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(onMenuDialogCalled(const QPoint &))); connect(this, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(onMenuDialogCalled(const QPoint &)));
m_sigMFFileSink = (SigMFFileSink*) channelrx; m_sigMFFileSink = (SigMFFileSink*) channelrx;
@ -342,7 +344,18 @@ void SigMFFileSinkGUI::onWidgetRolled(QWidget* widget, bool rollDown)
(void) widget; (void) widget;
(void) rollDown; (void) rollDown;
getRollupContents()->saveState(m_rollupState); RollupContents *rollupContents = getRollupContents();
if (rollupContents->hasExpandableWidgets()) {
setSizePolicy(sizePolicy().horizontalPolicy(), QSizePolicy::Expanding);
} else {
setSizePolicy(sizePolicy().horizontalPolicy(), QSizePolicy::Fixed);
}
int h = rollupContents->height() + rollupContents->getAdditionalHeiht() + getAdditionalHeight();
resize(width(), h);
rollupContents->saveState(m_rollupState);
applySettings(); applySettings();
} }

View File

@ -160,12 +160,14 @@ UDPSinkGUI::UDPSinkGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, BasebandS
m_doApplySettings(true), m_doApplySettings(true),
m_rfBandwidthChanged(false) m_rfBandwidthChanged(false)
{ {
ui->setupUi(getRollupContents());
getRollupContents()->arrangeRollups();
m_helpURL = "plugins/channelrx/udpsink/readme.md";
connect(getRollupContents(), SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool)));
connect(this, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(onMenuDialogCalled(const QPoint &)));
setAttribute(Qt::WA_DeleteOnClose, true); setAttribute(Qt::WA_DeleteOnClose, true);
m_helpURL = "plugins/channelrx/udpsink/readme.md";
RollupContents *rollupContents = getRollupContents();
ui->setupUi(rollupContents);
setSizePolicy(rollupContents->sizePolicy());
rollupContents->arrangeRollups();
connect(rollupContents, SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool)));
connect(this, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(onMenuDialogCalled(const QPoint &)));
m_udpSink = (UDPSink*) rxChannel; m_udpSink = (UDPSink*) rxChannel;
m_spectrumVis = m_udpSink->getSpectrumVis(); m_spectrumVis = m_udpSink->getSpectrumVis();
@ -598,7 +600,18 @@ void UDPSinkGUI::onWidgetRolled(QWidget* widget, bool rollDown)
m_udpSink->enableSpectrum(rollDown); m_udpSink->enableSpectrum(rollDown);
} }
getRollupContents()->saveState(m_rollupState); RollupContents *rollupContents = getRollupContents();
if (rollupContents->hasExpandableWidgets()) {
setSizePolicy(sizePolicy().horizontalPolicy(), QSizePolicy::Expanding);
} else {
setSizePolicy(sizePolicy().horizontalPolicy(), QSizePolicy::Fixed);
}
int h = rollupContents->height() + rollupContents->getAdditionalHeiht() + getAdditionalHeight();
resize(width(), h);
rollupContents->saveState(m_rollupState);
applySettings(); applySettings();
} }

View File

@ -303,6 +303,8 @@ void ChannelGUI::shrinkWindow()
{ {
qDebug("ChannelGUI::shrinkWindow"); qDebug("ChannelGUI::shrinkWindow");
adjustSize(); adjustSize();
int h = getRollupContents()->height() + getRollupContents()->getAdditionalHeiht() + getAdditionalHeight();
resize(width(), h);
} }
void ChannelGUI::setTitle(const QString& title) void ChannelGUI::setTitle(const QString& title)

View File

@ -92,6 +92,7 @@ protected:
void mouseMoveEvent(QMouseEvent* event); void mouseMoveEvent(QMouseEvent* event);
void resetContextMenuType() { m_contextMenuType = ContextMenuNone; } void resetContextMenuType() { m_contextMenuType = ContextMenuNone; }
void updateIndexLabel(); void updateIndexLabel();
int getAdditionalHeight() { return 2*20 + 12; }
DeviceType m_deviceType; DeviceType m_deviceType;
int m_deviceSetIndex; int m_deviceSetIndex;

View File

@ -92,6 +92,36 @@ void RollupContents::setHighlighted(bool highlighted)
} }
} }
int RollupContents::getAdditionalHeiht()
{
int pos = 0;
for (int i = 0; i < children().count(); ++i)
{
QWidget* r = qobject_cast<QWidget*>(children()[i]);
if (r && isRollupChild(r) && !r->isHidden()) {
pos += 5;
}
}
return pos;
}
bool RollupContents::hasExpandableWidgets()
{
for (int i = 0; i < children().count(); ++i)
{
QWidget* r = qobject_cast<QWidget*>(children()[i]);
if (r && isRollupChild(r) && !r->isHidden() && (r->sizePolicy().verticalPolicy() == QSizePolicy::Expanding)) {
return true;
}
}
return false;
}
int RollupContents::arrangeRollups() int RollupContents::arrangeRollups()
{ {
QFontMetrics fm(font()); QFontMetrics fm(font());

View File

@ -34,6 +34,8 @@ public:
void saveState(RollupState& state) const; void saveState(RollupState& state) const;
void restoreState(const RollupState& state); void restoreState(const RollupState& state);
int arrangeRollups(); int arrangeRollups();
int getAdditionalHeiht();
bool hasExpandableWidgets();
signals: signals:
void widgetRolled(QWidget* widget, bool rollDown); void widgetRolled(QWidget* widget, bool rollDown);