#include "widget/wsplitter.h" #include #include "moc_wsplitter.cpp" 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(this->count()); ok = true; } } // nothing in mixxx.cfg? Load default values if (!ok && context.hasNodeSelectString(node, "SplitSizes", &sizesJoined)) { msg = " for (" + sizesJoined + ") does not match the number of children nodes:" + QString::number(this->count()); } // found some value for splitsizes? if (!sizesJoined.isEmpty()) { QStringList sizesSplit = sizesJoined.split(","); QList sizesList; ok = false; for (const QString& sizeStr : sizesSplit) { sizesList.push_back(sizeStr.toInt(&ok)); if (!ok) { break; } } if (sizesList.length() != this->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)) { QStringList collapsibleSplit = collapsibleJoined.split(","); QList collapsibleList; ok = false; for (const QString& collapsibleStr : collapsibleSplit) { collapsibleList.push_back(collapsibleStr.toInt(&ok)>0); if (!ok) { break; } } if (collapsibleList.length() != this->count()) { msg = " for (" + collapsibleJoined + ") does not match the number of children nodes:" + QString::number(this->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); }