/* * Olive Community Edition - Non-Linear Video Editor * Copyright (C) 2025 Olive CE Team * * 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 3 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 . */ #include "nodeparamviewitembase.h" #include #include namespace olive { #define super QDockWidget NodeParamViewItemBase::NodeParamViewItemBase(QWidget *parent) : super(parent) , highlighted_(false) { // Create title bar widget title_bar_ = new NodeParamViewItemTitleBar(this); // Add title bar to widget this->setTitleBarWidget(title_bar_); // Connect title bar to this connect(title_bar_, &NodeParamViewItemTitleBar::ExpandedStateChanged, this, &NodeParamViewItemBase::SetExpanded); connect(title_bar_, &NodeParamViewItemTitleBar::PinToggled, this, &NodeParamViewItemBase::PinToggled); connect(title_bar_, &NodeParamViewItemTitleBar::Clicked, this, &NodeParamViewItemBase::Clicked); // Use dummy QWidget to retain width when not expanded (QDockWidget seems to ignore the titlebar // size hints and will shrink as small as possible if the body is hidden) hidden_body_ = new QWidget(this); // Default to hidden body, this also seems to fix an issue with clicks being intermittent // on the titlebar setWidget(hidden_body_); setAutoFillBackground(true); setFocusPolicy(Qt::ClickFocus); } bool NodeParamViewItemBase::IsExpanded() const { return title_bar_->IsExpanded(); } QString NodeParamViewItemBase::GetTitleBarTextFromNode(Node *n) { if (n->GetLabel().isEmpty()) { return n->Name(); } else { return tr("%1 (%2)").arg(n->GetLabel(), n->Name()); } } void NodeParamViewItemBase::SetBody(QWidget *body) { body_ = body; body_->setParent(this); if (title_bar_->IsExpanded()) { setWidget(body_); } } void NodeParamViewItemBase::paintEvent(QPaintEvent *event) { super::paintEvent(event); // Draw border if focused if (highlighted_) { QPainter p(this); p.setBrush(Qt::NoBrush); p.setPen(palette().highlight().color()); p.drawRect(rect().adjusted(0, 0, -1, -1)); } } void NodeParamViewItemBase::SetExpanded(bool e) { setWidget(e ? body_ : hidden_body_); title_bar_->SetExpanded(e); emit ExpandedChanged(e); } void NodeParamViewItemBase::changeEvent(QEvent *e) { if (e->type() == QEvent::LanguageChange) { Retranslate(); } super::changeEvent(e); } void NodeParamViewItemBase::moveEvent(QMoveEvent *event) { super::moveEvent(event); emit Moved(); } void NodeParamViewItemBase::mousePressEvent(QMouseEvent *e) { super::mousePressEvent(e); emit Clicked(); } }