Files
obs-studio/shared/qt/idian/widgets/PropertiesList.cpp
2025-08-22 16:21:52 -04:00

86 lines
2.3 KiB
C++

/******************************************************************************
Copyright (C) 2023 by Dennis Sädtler <dennis@obsproject.com>
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, either version 2 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 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/>.
******************************************************************************/
#include <Idian/PropertiesList.hpp>
#include <Idian/Row.hpp>
#include <QStyle>
#include <Idian/moc_PropertiesList.cpp>
using idian::PropertiesList;
PropertiesList::PropertiesList(QWidget *parent) : QFrame(parent)
{
layout = new QVBoxLayout();
layout->setSpacing(0);
layout->setContentsMargins(0, 0, 0, 0);
setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Minimum);
rowsList = QList<GenericRow *>();
setLayout(layout);
}
// Note: This function takes ownership of the added widget
// and it may be deleted when the properties list is destroyed
// or the clear() method is called!
void PropertiesList::addRow(GenericRow *row)
{
// Add custom spacer once more than one element exists
if (layout->count() > 0)
layout->addWidget(new PropertiesListSpacer(this));
// Custom properties to work around :first and :last not existing.
if (!first) {
Utils::addClass(row, "first");
first = row;
}
// Remove last property from existing last item
if (last)
Utils::removeClass(last, "last");
// Most recently added item is also always last
Utils::addClass(row, "last");
last = row;
row->setParent(this);
rowsList.append(row);
layout->addWidget(row);
adjustSize();
}
void PropertiesList::clear()
{
rowsList.clear();
first = nullptr;
last = nullptr;
QLayoutItem *item = layout->takeAt(0);
while (item) {
if (item->widget())
item->widget()->deleteLater();
delete item;
item = layout->takeAt(0);
}
adjustSize();
}