Something went wrong. Try again.
Mixxx DJ software with MCP, Subsonic/Navidrome streaming library support — browse and load tracks from your self-hosted music server mixxx.org
subsonic navidrome streaming audio dj mac linux midi
Something went wrong. Try again.
C++
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121#include "widget/wsplitter.h"
#include <QEvent>#include <QList>
#include "moc_wsplitter.cpp"#include "skin/legacy/skincontext.h"
WSplitter::WSplitter(QWidget* pParent, UserSettingsPointer pConfig) : QSplitter(pParent), WBaseWidget(this), m_pConfig(pConfig) { connect(this, &WSplitter::splitterMoved, this, &WSplitter::slotSplitterMoved);}
void WSplitter::setup(const QDomNode& node, const SkinContext& context) { // Load split sizes QString sizesJoined; QString msg; bool ok = false;
// Default orientation is horizontal. For vertical splitters, the orientation must be set // before calling setSizes() for reloading the saved state to work. QString layout; if (context.hasNodeSelectString(node, "Orientation", &layout)) { if (layout == "vertical") { setOrientation(Qt::Vertical); } else if (layout == "horizontal") { setOrientation(Qt::Horizontal); } }
// Try to load last values stored in mixxx.cfg QString splitSizesConfigKey; if (context.hasNodeSelectString(node, "SplitSizesConfigKey", &splitSizesConfigKey)) { m_configKey = ConfigKey::parseCommaSeparated(splitSizesConfigKey);
if (m_pConfig->exists(m_configKey)) { sizesJoined = m_pConfig->getValueString(m_configKey); msg = "Reading .cfg file: '" + m_configKey.group + " " + m_configKey.item + " " + sizesJoined + "' does not match the number of children nodes:" + QString::number(count()); ok = true; } }
// nothing in mixxx.cfg? Load default values if (!ok && context.hasNodeSelectString(node, "SplitSizes", &sizesJoined)) { msg = "<SplitSizes> for <Splitter> (" + sizesJoined + ") does not match the number of children nodes:" + QString::number(count()); }
// found some value for splitsizes? if (!sizesJoined.isEmpty()) { const QStringList sizesSplit = sizesJoined.split(","); QList<int> sizesList; ok = false; for (const QString& sizeStr : sizesSplit) { sizesList.push_back(sizeStr.toInt(&ok)); if (!ok) { break; } } if (sizesList.length() != count()) { SKIN_WARNING(node, context, msg); ok = false; } if (ok) { this->setSizes(sizesList); } }
// Which children can be collapsed? QString collapsibleJoined; if (context.hasNodeSelectString(node, "Collapsible", &collapsibleJoined)) { const QStringList collapsibleSplit = collapsibleJoined.split(","); QList<bool> collapsibleList; ok = false; for (const QString& collapsibleStr : collapsibleSplit) { collapsibleList.push_back(collapsibleStr.toInt(&ok)>0); if (!ok) { break; } } if (collapsibleList.length() != count()) { msg = "<Collapsible> for <Splitter> (" + collapsibleJoined + ") does not match the number of children nodes:" + QString::number(count()); SKIN_WARNING(node, context, msg); ok = false; } if (ok) { int i = 0; for (bool collapsible : collapsibleList) { setCollapsible(i++, collapsible); } } }}
void WSplitter::slotSplitterMoved() { if (!m_configKey.group.isEmpty() && !m_configKey.item.isEmpty()) { QStringList sizeStrList; const auto sizesIntList = sizes(); for (const int& sizeInt : sizesIntList) { sizeStrList.push_back(QString::number(sizeInt)); } QString sizesStr = sizeStrList.join(","); m_pConfig->set(m_configKey, ConfigValue(sizesStr)); }}
bool WSplitter::event(QEvent* pEvent) { if (pEvent->type() == QEvent::ToolTip) { updateTooltip(); } return QSplitter::event(pEvent);}