diff options
Diffstat (limited to 'src/Authoring/Studio/Palettes/Slide/SlideView.cpp')
-rw-r--r-- | src/Authoring/Studio/Palettes/Slide/SlideView.cpp | 621 |
1 files changed, 0 insertions, 621 deletions
diff --git a/src/Authoring/Studio/Palettes/Slide/SlideView.cpp b/src/Authoring/Studio/Palettes/Slide/SlideView.cpp deleted file mode 100644 index c49f34d2..00000000 --- a/src/Authoring/Studio/Palettes/Slide/SlideView.cpp +++ /dev/null @@ -1,621 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of Qt 3D Studio. -** -** $QT_BEGIN_LICENSE:GPL-EXCEPT$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "SlideView.h" -#include "Core.h" -#include "Dispatch.h" -#include "Doc.h" -#include "StudioPreferences.h" -#include "SlideModel.h" -#include "StudioApp.h" -#include "StudioUtils.h" -#include "SlideContextMenu.h" -#include "DataInputSelectView.h" -#include "DataInputDlg.h" -#include "IDocumentEditor.h" -#include "ClientDataModelBridge.h" -#include "Qt3DSDMStudioSystem.h" -#include "Qt3DSDMSlides.h" -#include "Dialogs.h" - -#include "QtWidgets/qlabel.h" -#include <QtQml/qqmlcontext.h> -#include <QtQml/qqmlengine.h> - -SlideView::SlideView(QWidget *parent) : QQuickWidget(parent) - , m_MasterSlideModel(new SlideModel(1, this)) - , m_SlidesModel(new SlideModel(0, this)) - , m_CurrentModel(m_SlidesModel) - , m_variantsToolTip(new QLabel(this)) - , m_toolTip(tr("No Controller")) -{ - m_variantsToolTip->setObjectName(QStringLiteral("variantsToolTip")); - m_variantsToolTip->setWindowModality(Qt::NonModal); - m_variantsToolTip->setWindowFlags(Qt::FramelessWindowHint | Qt::ToolTip); - m_variantsToolTip->setContentsMargins(2, 2, 2, 2); - - g_StudioApp.GetCore()->GetDispatch()->AddPresentationChangeListener(this); - setResizeMode(QQuickWidget::SizeRootObjectToView); - QTimer::singleShot(0, this, &SlideView::initialize); - - m_variantRefreshTimer.setSingleShot(true); - m_variantRefreshTimer.setInterval(0); - connect(&m_variantRefreshTimer, &QTimer::timeout, [this]() { - m_SlidesModel->refreshVariants(); - m_MasterSlideModel->refreshVariants(m_SlidesModel->variantsModel(), - m_SlidesModel->variantsModelKeys()); - }); -} - -SlideView::~SlideView() -{ - clearSlideList(); - g_StudioApp.GetCore()->GetDispatch()->RemovePresentationChangeListener(this); - delete m_dataInputSelector; -} - -bool SlideView::showMasterSlide() const -{ - return m_CurrentModel == m_MasterSlideModel; -} - -void SlideView::setShowMasterSlide(bool show) -{ - const bool currentIsMaster = m_CurrentModel == m_MasterSlideModel; - if (show == currentIsMaster) - return; - - m_CurrentModel = show ? m_MasterSlideModel : m_SlidesModel; - - // We need to get the first slide in the correct master mode - CDoc *theDoc = GetDoc(); - qt3dsdm::Qt3DSDMInstanceHandle theRoot = theDoc->GetActiveRootInstance(); - CClientDataModelBridge *theBridge = GetBridge(); - qt3dsdm::Qt3DSDMSlideHandle theNewActiveSlide = - theBridge->GetOrCreateGraphRoot(theRoot); // this will return the master slide - qt3dsdm::ISlideSystem *theSlideSystem = theDoc->GetStudioSystem()->GetSlideSystem(); - if (m_CurrentModel != m_MasterSlideModel) { - qt3dsdm::Qt3DSDMSlideHandle masterSlide = theNewActiveSlide; - theNewActiveSlide = m_MasterSlideReturnPointers.value(masterSlide, 0); - if (!theSlideSystem->SlideValid(theNewActiveSlide)) { - theNewActiveSlide = theSlideSystem->GetSlideByIndex( - masterSlide, 1); // activate the first slide; - } - } - - // We have forced a mode change, and so we need to set the current active TC - // to be in the correct mode so our slide palette will show the correct information - if (theNewActiveSlide.Valid()) - theDoc->NotifyActiveSlideChanged(theNewActiveSlide); - - Q_EMIT showMasterSlideChanged(); - Q_EMIT currentModelChanged(); -} - -void SlideView::showControllerDialog(const QPoint &point) -{ - QString currCtr = m_currentController.size() ? - m_currentController : m_dataInputSelector->getNoneString(); - QVector<QPair<QString, int>> dataInputList; - - for (auto &it : qAsConst(g_StudioApp.m_dataInputDialogItems)) - dataInputList.append({it->name, it->type}); - - m_dataInputSelector->setData(dataInputList, currCtr); - CDialogs::showWidgetBrowser(this, m_dataInputSelector, point, - CDialogs::WidgetBrowserAlign::ToolButton); -} - -bool SlideView::toolTipsEnabled() -{ - return CStudioPreferences::ShouldShowTooltips(); -} - -QSize SlideView::sizeHint() const -{ - return {150, 500}; -} - -QSize SlideView::minimumSizeHint() const -{ - // prevent datainput control indicator from overlapping - // with slide name too much when panel is minimised - return {100, 0}; -} - -void SlideView::deselectAll() -{ - g_StudioApp.GetCore()->GetDoc()->DeselectAllItems(); -} - -void SlideView::addNewSlide(int row) -{ - m_SlidesModel->addNewSlide(row); -} - -void SlideView::removeSlide(int row) -{ - m_SlidesModel->removeSlide(row); -} - -void SlideView::duplicateSlide(int row) -{ - m_SlidesModel->duplicateRow(row); -} - -void SlideView::startSlideRearrange(int row) -{ - m_SlidesModel->startRearrange(row); -} - -void SlideView::moveSlide(int from, int to) -{ - m_SlidesModel->move(from, to); -} - -void SlideView::finishSlideRearrange(bool commit) -{ - m_SlidesModel->finishRearrange(commit); -} - -void SlideView::showContextMenu(int x, int y, int row) -{ - SlideContextMenu contextMenu(this, row, m_SlidesModel->rowCount(), - m_CurrentModel == m_MasterSlideModel); - contextMenu.exec(mapToGlobal({x, y})); -} - -void SlideView::showVariantsTooltip(int row, const QPoint &point) -{ - QString templ = QStringLiteral("<font color='%1'>%2</font>"); - QString tooltipStr("<table>"); - const auto variantsDef = g_StudioApp.GetCore()->getProjectFile().variantsDef(); - const auto slideIndex = m_CurrentModel->rowToSlideIndex(row); - const auto variantsModel = m_CurrentModel->variantsModel()[slideIndex]; - const auto variantsModelKeys = m_CurrentModel->variantsModelKeys()[slideIndex]; - for (auto &g : variantsModelKeys) { - tooltipStr.append("<tr><td>"); - tooltipStr.append(templ.arg(variantsDef[g].m_color).arg(g + ": ")); - tooltipStr.append("</td><td>"); - const auto tags = variantsModel[g]; - for (auto &t : tags) - tooltipStr.append(t + ", "); - tooltipStr.chop(2); - tooltipStr.append("</td></tr>"); - } - tooltipStr.append("</table>"); - - m_variantsToolTip->setText(tooltipStr); - m_variantsToolTip->adjustSize(); - m_variantsToolTip->move(point); - m_variantsToolTip->raise(); - m_variantsToolTip->show(); -} - -void SlideView::hideVariantsTooltip() -{ - m_variantsToolTip->hide(); -} - -void SlideView::OnNewPresentation() -{ - // Register callbacks - qt3dsdm::IStudioFullSystemSignalProvider *theSignalProvider = - g_StudioApp.GetCore()->GetDoc()->GetStudioSystem()->GetFullSystemSignalProvider(); - m_MasterSlideReturnPointers.clear(); - - m_Connections.push_back(theSignalProvider->ConnectActiveSlide( - std::bind(&SlideView::OnActiveSlide, this, std::placeholders::_1, - std::placeholders::_2, std::placeholders::_3))); - - // Needed for undo/redo functionality to work properly - m_Connections.push_back(theSignalProvider->ConnectSlideCreated( - std::bind(&SlideView::OnNewSlide, this, std::placeholders::_1))); - m_Connections.push_back(theSignalProvider->ConnectSlideDeleted( - std::bind(&SlideView::OnDeleteSlide, this, std::placeholders::_1))); - m_Connections.push_back(theSignalProvider->ConnectSlideRearranged( - std::bind(&SlideView::OnSlideRearranged, this, std::placeholders::_1, - std::placeholders::_2, std::placeholders::_3))); - - // Set up listener for the name changes to slide - m_Connections.push_back(theSignalProvider->ConnectInstancePropertyValue( - std::bind(&SlideView::onPropertyChanged, this, - std::placeholders::_1, std::placeholders::_2))); - - // object created/deleted - m_Connections.push_back(theSignalProvider->ConnectInstanceCreated( - std::bind(&SlideView::onAssetCreated, this, std::placeholders::_1))); - m_Connections.push_back(theSignalProvider->ConnectInstanceDeleted( - std::bind(&SlideView::onAssetDeleted, this, std::placeholders::_1))); - - // Set up listener for undo/redo changes in order to update - // slide datainput control - CDispatch *theDispatch = g_StudioApp.GetCore()->GetDispatch(); - theDispatch->AddDataModelListener(this); - - refreshVariants(); -} - -void SlideView::OnClosingPresentation() -{ - m_Connections.clear(); - clearSlideList(); -} - -void SlideView::mousePressEvent(QMouseEvent *event) -{ - g_StudioApp.setLastActiveView(this); - QQuickWidget::mousePressEvent(event); -} - -void SlideView::OnActiveSlide(const qt3dsdm::Qt3DSDMSlideHandle &inMaster, int inIndex, - const qt3dsdm::Qt3DSDMSlideHandle &inSlide) -{ - // Don't use inIndex because inIndex might have been changed due to deletion - Q_UNUSED(inIndex); - Q_UNUSED(inMaster); - - qt3dsdm::ISlideSystem &theSlideSystem(*GetDoc()->GetStudioSystem()->GetSlideSystem()); - int currentSlideIndex = theSlideSystem.GetSlideIndex(inSlide); - setShowMasterSlide(currentSlideIndex == 0); - setActiveSlide(inSlide); - - // Update slide highlight to match active slide - // -1 because first slide is masterslide - auto index = m_SlidesModel->index(currentSlideIndex - 1, 0); - m_SlidesModel->setSelectedSlideIndex(index); - - if (currentSlideIndex != 0) - m_MasterSlideReturnPointers[inMaster] = inSlide; -} - -void SlideView::OnNewSlide(const qt3dsdm::Qt3DSDMSlideHandle &inSlide) -{ - m_SlidesModel->onNewSlide(inSlide); -} - -void SlideView::OnDeleteSlide(const qt3dsdm::Qt3DSDMSlideHandle &inSlide) -{ - m_SlidesModel->onDeleteSlide(inSlide); -} - -void SlideView::OnSlideRearranged(const qt3dsdm::Qt3DSDMSlideHandle &inMaster, int inOldIndex, - int inNewIndex) -{ - m_SlidesModel->onSlideRearranged(inMaster, inOldIndex, inNewIndex); -} - -void SlideView::onDataInputChange(int handle, int instance, const QString &dataInputName) -{ - Q_UNUSED(handle) - Q_UNUSED(instance) - - if (dataInputName == m_currentController) - return; - - CDoc *doc = g_StudioApp.GetCore()->GetDoc(); - CClientDataModelBridge *bridge = doc->GetStudioSystem()->GetClientDataModelBridge(); - qt3dsdm::Qt3DSDMInstanceHandle slideRoot = doc->GetActiveRootInstance(); - QString fullSlideControlStr; - - if (dataInputName != m_dataInputSelector->getNoneString()) { - fullSlideControlStr = "$" + dataInputName + " @slide"; - m_controlled = true; - m_currentController = dataInputName; - m_toolTip = tr("Slide Controller:\n") + m_currentController; - } else { - m_controlled = false; - m_currentController.clear(); - m_toolTip = tr("No Controller"); - } - qt3dsdm::Qt3DSDMPropertyHandle ctrldProp; - if (bridge->GetObjectType(slideRoot) == EStudioObjectType::OBJTYPE_SCENE) - ctrldProp = bridge->GetObjectDefinitions().m_Scene.m_ControlledProperty; - else if (bridge->GetObjectType(slideRoot) == EStudioObjectType::OBJTYPE_COMPONENT) - ctrldProp = bridge->GetObjectDefinitions().m_Component.m_ControlledProperty; - else - Q_ASSERT(false); - - qt3dsdm::SValue controlledPropertyVal; - doc->GetStudioSystem()->GetPropertySystem()->GetInstancePropertyValue(slideRoot, ctrldProp, - controlledPropertyVal); - - // To indicate that slide transitions are controlled by data input, - // we set "controlled property" of this scene to contain the name of - // controller followed by special indicator "@slide". - // If we have existing slide control in this root element, replace it. - // Otherwise just append slide control string to controlledproperty - // (it might already contain timeline control information) - QString existingCtrl = qt3dsdm::get<QString>(controlledPropertyVal); - if (existingCtrl.contains(QLatin1String("@slide"))) { - int slideStrPos = existingCtrl.indexOf(QLatin1String("@slide")); - // find the controlling datainput name and build the string to replace - int ctrStrPos = existingCtrl.lastIndexOf(QLatin1Char('$'), slideStrPos - 2); - QString prevCtrler = existingCtrl.mid(ctrStrPos, slideStrPos - ctrStrPos - 1); - existingCtrl.replace(prevCtrler + QLatin1String(" @slide"), fullSlideControlStr); - } else { - if (!existingCtrl.isEmpty() && m_controlled) - existingCtrl.append(QLatin1Char(' ')); - existingCtrl.append(fullSlideControlStr); - } - - if (existingCtrl.endsWith(QLatin1Char(' '))) - existingCtrl.chop(1); - - if (existingCtrl.startsWith(QLatin1Char(' '))) - existingCtrl.remove(0, 1); - - qt3dsdm::SValue fullCtrlPropVal - = std::make_shared<qt3dsdm::CDataStr>(Q3DStudio::CString::fromQString(existingCtrl)); - - Q3DStudio::SCOPED_DOCUMENT_EDITOR(*doc, QObject::tr("Set Slide control")) - ->SetInstancePropertyValue(slideRoot, ctrldProp, fullCtrlPropVal); - - UpdateSlideViewTitleColor(); - Q_EMIT controlledChanged(); -} - -void SlideView::onAssetCreated(qt3dsdm::Qt3DSDMInstanceHandle inInstance) -{ - // refresh the variants model if the created asset has a variants property set. - if (GetBridge()->GetObjectType(inInstance) & OBJTYPE_IS_VARIANT) { - const auto propertySystem = GetDoc()->GetPropertySystem(); - qt3dsdm::SValue sValue; - if (propertySystem->GetInstancePropertyValue(inInstance, - GetBridge()->getVariantsProperty(inInstance), - sValue)) { - if (qt3dsdm::get<qt3dsdm::TDataStrPtr>(sValue)->GetLength() != 0) - refreshVariants(); - } - } -} - -void SlideView::onAssetDeleted(qt3dsdm::Qt3DSDMInstanceHandle inInstance) -{ - Q_UNUSED(inInstance) - - refreshVariants(); -} - -void SlideView::onPropertyChanged(qt3dsdm::Qt3DSDMInstanceHandle inInstance, - qt3dsdm::Qt3DSDMPropertyHandle inProperty) -{ - // refresh slide name - m_SlidesModel->refreshSlideLabel(inInstance, inProperty); - - // refresh variants - if (inProperty == GetBridge()->getVariantsProperty(inInstance)) - refreshVariants(); -} - -void SlideView::onDockLocationChange(Qt::DockWidgetArea area) -{ - m_dockArea = area; - Q_EMIT dockAreaChanged(); -} - -// Set the state of slide control based on scene or component -// controlledproperty -void SlideView::updateDataInputStatus() -{ - CDoc *doc = g_StudioApp.GetCore()->GetDoc(); - CClientDataModelBridge *bridge = doc->GetStudioSystem()->GetClientDataModelBridge(); - qt3dsdm::Qt3DSDMInstanceHandle slideRoot = doc->GetActiveRootInstance(); - - qt3dsdm::Qt3DSDMPropertyHandle ctrldProp; - if (bridge->GetObjectType(slideRoot) == EStudioObjectType::OBJTYPE_SCENE) - ctrldProp = bridge->GetObjectDefinitions().m_Scene.m_ControlledProperty; - else if (bridge->GetObjectType(slideRoot) == EStudioObjectType::OBJTYPE_COMPONENT) - ctrldProp = bridge->GetObjectDefinitions().m_Component.m_ControlledProperty; - else - Q_ASSERT(false); - - qt3dsdm::SValue controlledPropertyVal; - doc->GetStudioSystem()->GetPropertySystem()->GetInstancePropertyValue(slideRoot, ctrldProp, - controlledPropertyVal); - QString existingCtrl = qt3dsdm::get<QString>(controlledPropertyVal); - - QString newController; - int slideStrPos = existingCtrl.indexOf(QLatin1String("@slide")); - if (slideStrPos != -1) { - int ctrStrPos = existingCtrl.lastIndexOf(QLatin1Char('$'), slideStrPos - 2); - newController = existingCtrl.mid(ctrStrPos + 1, slideStrPos - ctrStrPos - 2); - } - if (newController != m_currentController) { - m_currentController = newController; - if (!m_currentController.isEmpty()) { - m_toolTip = tr("Slide Controller:\n") + m_currentController; - m_controlled = true; - } else { - m_currentController.clear(); - m_toolTip = tr("No Controller"); - m_controlled = false; - } - // update UI - UpdateSlideViewTitleColor(); - Q_EMIT controlledChanged(); - if (m_dataInputSelector && m_dataInputSelector->isVisible()) - m_dataInputSelector->setCurrentController(m_currentController); - } -} -void SlideView::initialize() -{ - CStudioPreferences::setQmlContextProperties(rootContext()); - rootContext()->setContextProperty(QStringLiteral("_parentView"), this); - rootContext()->setContextProperty(QStringLiteral("_resDir"), StudioUtils::resourceImageUrl()); - - engine()->addImportPath(StudioUtils::qmlImportPath()); - setSource(QUrl(QStringLiteral("qrc:/Palettes/Slide/SlideView.qml"))); - - const QVector<EDataType> acceptedTypes = { EDataType::DataTypeString }; - m_dataInputSelector = new DataInputSelectView(acceptedTypes, this); - connect(m_dataInputSelector, &DataInputSelectView::dataInputChanged, - this, &SlideView::onDataInputChange); -} - -void SlideView::clearSlideList() -{ - m_ActiveRoot = 0; - m_SlidesModel->clear(); -} - -void SlideView::setActiveSlide(const qt3dsdm::Qt3DSDMSlideHandle &inActiveSlideHandle) -{ - // Make sure we are in the correct master mode based on the inActiveSlideHandle - // If we changed mode, then we need to force a rebuild - bool theRebuildFlag = isMaster(inActiveSlideHandle) && (m_CurrentModel != m_MasterSlideModel); - - // Check to see if the incoming slide is a sibling of the current active slide - // If it is, then we may be able to update without rebuilding everything - if (!theRebuildFlag - && m_ActiveRoot == GetBridge()->GetOwningComponentInstance(inActiveSlideHandle)) { - // If this is a new active slide, but the same root parent - if (m_ActiveSlideHandle != inActiveSlideHandle) { - m_ActiveSlideHandle = inActiveSlideHandle; - } - } else { - // We have a new parent or a new slide that makes us rebuild the entire list - rebuildSlideList(inActiveSlideHandle); - } -} - -void SlideView::rebuildSlideList(const qt3dsdm::Qt3DSDMSlideHandle &inActiveSlideHandle) -{ - // Clear out the existing slides - clearSlideList(); - - // Add new slide controls as required - if (inActiveSlideHandle.Valid()) { - m_ActiveSlideHandle = inActiveSlideHandle; - m_ActiveRoot = GetBridge()->GetOwningComponentInstance(inActiveSlideHandle); - - // Get the Master Slide handle and the slide count - qt3dsdm::ISlideSystem *theSlideSystem = GetSlideSystem(); - qt3dsdm::Qt3DSDMSlideHandle theMasterSlide = - theSlideSystem->GetMasterSlide(inActiveSlideHandle); - - // update handle for master slide - qt3dsdm::Qt3DSDMSlideHandle theMasterSlideHandle = - theSlideSystem->GetSlideByIndex(theMasterSlide, 0); - m_MasterSlideModel->setData(m_MasterSlideModel->index(0, 0), - QVariant::fromValue(theMasterSlideHandle), - SlideModel::HandleRole); - - long theSlideCount = (long)theSlideSystem->GetSlideCount(theMasterSlide); - - // Iterate through, creating the new slide controls - m_SlidesModel->clear(); - m_SlidesModel->insertRows(0, theSlideCount - 1, {}); - int row = 0; - for (long theSlideIndex = 1; theSlideIndex < theSlideCount; ++theSlideIndex) { - qt3dsdm::Qt3DSDMSlideHandle theSlideHandle = - theSlideSystem->GetSlideByIndex(theMasterSlide, theSlideIndex); - auto index = m_SlidesModel->index(row, 0); - m_SlidesModel->setData(index, - QVariant::fromValue(theSlideHandle), - SlideModel::HandleRole); - const auto instanceHandle = - GetDoc()->GetStudioSystem()->GetSlideSystem()->GetSlideInstance(theSlideHandle); - m_SlidesModel->setData(index, - GetBridge()->GetName(instanceHandle).toQString(), - SlideModel::NameRole); - // This slide is the active slide - if (theSlideHandle == m_ActiveSlideHandle) { - m_SlidesModel->setData(index, true, SlideModel::SelectedRole); - } - row++; - } - } -} - -CDoc *SlideView::GetDoc() const -{ - return g_StudioApp.GetCore()->GetDoc(); -} - -CClientDataModelBridge *SlideView::GetBridge() const -{ - return GetDoc()->GetStudioSystem()->GetClientDataModelBridge(); -} - -qt3dsdm::ISlideSystem *SlideView::GetSlideSystem() const -{ - return GetDoc()->GetStudioSystem()->GetSlideSystem(); -} - -long SlideView::GetSlideIndex(const qt3dsdm::Qt3DSDMSlideHandle &inSlideHandle) const -{ - return GetSlideSystem()->GetSlideIndex(inSlideHandle); -} - -bool SlideView::isMaster(const qt3dsdm::Qt3DSDMSlideHandle &inSlideHandle) const -{ - return (0 == GetSlideIndex(inSlideHandle)); -} - -void SlideView::refreshVariants() -{ - if (!m_variantRefreshTimer.isActive()) - m_variantRefreshTimer.start(); -} - -void SlideView::OnBeginDataModelNotifications() -{ -} - -void SlideView::OnEndDataModelNotifications() -{ - updateDataInputStatus(); -} - -void SlideView::OnImmediateRefreshInstanceSingle(qt3dsdm::Qt3DSDMInstanceHandle inInstance) -{ - Q_UNUSED(inInstance) -} - -void SlideView::OnImmediateRefreshInstanceMultiple( - qt3dsdm::Qt3DSDMInstanceHandle *inInstance, long inInstanceCount) -{ - Q_UNUSED(inInstance) - Q_UNUSED(inInstanceCount) -} - -// Notify the user about control state change also with slide view -// title color change. -void SlideView::UpdateSlideViewTitleColor() { - QString styleString; - if (m_controlled) { - styleString = "QDockWidget#slide { color: " - + QString(CStudioPreferences::dataInputColor().name()) + "; }"; - } else { - styleString = "QDockWidget#slide { color: " - + QString(CStudioPreferences::textColor().name()) + "; }"; - } - - parentWidget()->setStyleSheet(styleString); -} |