allow nodeui to modify several node values at once

This commit is contained in:
itsmattkc
2019-08-09 13:21:20 +10:00
parent c38bd7a1bb
commit 0a56dbe429
4 changed files with 95 additions and 57 deletions
@@ -12,13 +12,19 @@
#include "panel/project/project.h"
// End test code
NodeParamViewWidgetBridge::NodeParamViewWidgetBridge(QObject* parent, NodeInput* input) :
QObject(parent),
input_(input)
NodeParamViewWidgetBridge::NodeParamViewWidgetBridge(QObject* parent) :
QObject(parent)
{
Q_ASSERT(parent != nullptr && input_ != nullptr);
}
CreateWidgets();
void NodeParamViewWidgetBridge::AddInput(NodeInput *input)
{
inputs_.append(input);
// If this was the first input, create the widgets
if (inputs_.size() == 1) {
CreateWidgets();
}
}
const QList<QWidget *> &NodeParamViewWidgetBridge::widgets()
@@ -28,13 +34,15 @@ const QList<QWidget *> &NodeParamViewWidgetBridge::widgets()
void NodeParamViewWidgetBridge::CreateWidgets()
{
NodeInput* base_input = inputs_.first();
// Return empty list if the NodeInput has no actual input data types
if (input_->inputs().isEmpty()) {
if (base_input->inputs().isEmpty()) {
return;
}
// We assume the first data type is the "primary" type
switch (input_->inputs().first()) {
switch (base_input->inputs().first()) {
// None of these inputs have applicable UI widgets
case NodeParam::kNone:
case NodeParam::kAny:
@@ -80,7 +88,10 @@ void NodeParamViewWidgetBridge::CreateWidgets()
// Pretty hacky way of getting the root folder for this node's sequence
ProjectPanel* pp = olive::panel_focus_manager->MostRecentlyFocused<ProjectPanel>();
footage_combobox->SetRoot(pp->project()->root());
footage_combobox->SetFootage(Node::ValueToPtr<Footage>(input_->get_value(Now())));
// Use multiple values
footage_combobox->SetFootage(Node::ValueToPtr<Footage>(base_input->get_value(Now())));
connect(footage_combobox, SIGNAL(FootageChanged(Footage*)), this, SLOT(WidgetCallback()));
// End test code
@@ -99,50 +110,52 @@ rational NodeParamViewWidgetBridge::Now()
void NodeParamViewWidgetBridge::WidgetCallback()
{
switch (input_->inputs().first()) {
// None of these inputs have applicable UI widgets
case NodeParam::kNone:
case NodeParam::kAny:
case NodeParam::kBlock:
case NodeParam::kTexture:
case NodeParam::kMatrix:
break;
case NodeParam::kInt:
// FIXME: LabelSlider in INTEGER mode
break;
case NodeParam::kFloat:
// FIXME: LabelSlider in FLOAT mode
break;
case NodeParam::kFile:
// FIXME: File selector
break;
case NodeParam::kColor:
// FIXME: Color selector
break;
case NodeParam::kString:
{
// Sender is a QLineEdit
//QLineEdit* line_edit = static_cast<QLineEdit*>(sender());
break;
}
case NodeParam::kBoolean:
{
// Widget is a QCheckBox
//QCheckBox* check_box = static_cast<QCheckBox*>(sender());
break;
}
case NodeParam::kFont:
{
// Widget is a QFontComboBox
//QFontComboBox* font_combobox = static_cast<QFontComboBox*>(sender());
break;
}
case NodeParam::kFootage:
{
// Widget is a FootageComboBox
FootageComboBox* footage_combobox = static_cast<FootageComboBox*>(sender());
input_->set_value(Now(), Node::PtrToValue(footage_combobox->SelectedFootage()));
break;
}
foreach (NodeInput* input, inputs_) {
switch (input->inputs().first()) {
// None of these inputs have applicable UI widgets
case NodeParam::kNone:
case NodeParam::kAny:
case NodeParam::kBlock:
case NodeParam::kTexture:
case NodeParam::kMatrix:
break;
case NodeParam::kInt:
// FIXME: LabelSlider in INTEGER mode
break;
case NodeParam::kFloat:
// FIXME: LabelSlider in FLOAT mode
break;
case NodeParam::kFile:
// FIXME: File selector
break;
case NodeParam::kColor:
// FIXME: Color selector
break;
case NodeParam::kString:
{
// Sender is a QLineEdit
//QLineEdit* line_edit = static_cast<QLineEdit*>(sender());
break;
}
case NodeParam::kBoolean:
{
// Widget is a QCheckBox
//QCheckBox* check_box = static_cast<QCheckBox*>(sender());
break;
}
case NodeParam::kFont:
{
// Widget is a QFontComboBox
//QFontComboBox* font_combobox = static_cast<QFontComboBox*>(sender());
break;
}
case NodeParam::kFootage:
{
// Widget is a FootageComboBox
FootageComboBox* footage_combobox = static_cast<FootageComboBox*>(sender());
input->set_value(Now(), Node::PtrToValue(footage_combobox->SelectedFootage()));
break;
}
}
}
}