183 lines
4.7 KiB
C++
183 lines
4.7 KiB
C++
#include "nodeparamviewwidgetbridge.h"
|
|
|
|
#include <QFontComboBox>
|
|
#include <QLineEdit>
|
|
#include <QCheckBox>
|
|
|
|
#include "node/node.h"
|
|
#include "widget/footagecombobox/footagecombobox.h"
|
|
#include "widget/slider/floatslider.h"
|
|
#include "widget/slider/integerslider.h"
|
|
|
|
// FIXME: Test code only
|
|
#include "panel/panelmanager.h"
|
|
#include "panel/project/project.h"
|
|
// End test code
|
|
|
|
NodeParamViewWidgetBridge::NodeParamViewWidgetBridge(QObject* parent) :
|
|
QObject(parent)
|
|
{
|
|
}
|
|
|
|
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()
|
|
{
|
|
return widgets_;
|
|
}
|
|
|
|
void NodeParamViewWidgetBridge::CreateWidgets()
|
|
{
|
|
NodeInput* base_input = inputs_.first();
|
|
|
|
// Return empty list if the NodeInput has no actual input data types
|
|
if (base_input->inputs().isEmpty()) {
|
|
return;
|
|
}
|
|
|
|
// We assume the first data type is the "primary" type
|
|
switch (base_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:
|
|
case NodeParam::kTrack:
|
|
case NodeParam::kRational:
|
|
break;
|
|
case NodeParam::kInt:
|
|
{
|
|
IntegerSlider* slider = new IntegerSlider();
|
|
widgets_.append(slider);
|
|
connect(slider, SIGNAL(ValueChanged(int)), this, SLOT(WidgetCallback()));
|
|
break;
|
|
}
|
|
case NodeParam::kFloat:
|
|
{
|
|
FloatSlider* slider = new FloatSlider();
|
|
slider->SetValue(base_input->get_value(0).toDouble());
|
|
widgets_.append(slider);
|
|
connect(slider, SIGNAL(ValueChanged(double)), this, SLOT(WidgetCallback()));
|
|
break;
|
|
}
|
|
case NodeParam::kFile:
|
|
// FIXME: File selector
|
|
break;
|
|
case NodeParam::kColor:
|
|
// FIXME: Color selector
|
|
break;
|
|
case NodeParam::kString:
|
|
{
|
|
QLineEdit* line_edit = new QLineEdit();
|
|
widgets_.append(line_edit);
|
|
connect(line_edit, SIGNAL(textEdited(const QString &text)), this, SLOT(WidgetCallback()));
|
|
break;
|
|
}
|
|
case NodeParam::kBoolean:
|
|
{
|
|
QCheckBox* check_box = new QCheckBox();
|
|
widgets_.append(check_box);
|
|
break;
|
|
}
|
|
case NodeParam::kFont:
|
|
{
|
|
QFontComboBox* font_combobox = new QFontComboBox();
|
|
widgets_.append(font_combobox);
|
|
break;
|
|
}
|
|
case NodeParam::kFootage:
|
|
{
|
|
FootageComboBox* footage_combobox = new FootageComboBox();
|
|
|
|
// FIXME: Test code
|
|
// 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());
|
|
|
|
// Use multiple values
|
|
footage_combobox->SetFootage(Node::ValueToPtr<Footage>(base_input->get_value(0)));
|
|
|
|
connect(footage_combobox, SIGNAL(FootageChanged(Footage*)), this, SLOT(WidgetCallback()));
|
|
// End test code
|
|
|
|
widgets_.append(footage_combobox);
|
|
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
void NodeParamViewWidgetBridge::WidgetCallback()
|
|
{
|
|
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:
|
|
case NodeParam::kTrack:
|
|
case NodeParam::kRational:
|
|
break;
|
|
case NodeParam::kInt:
|
|
{
|
|
// Widget is a IntegerSlider
|
|
IntegerSlider* int_slider = static_cast<IntegerSlider*>(sender());
|
|
input->set_value(int_slider->GetValue());
|
|
break;
|
|
}
|
|
case NodeParam::kFloat:
|
|
{
|
|
// Widget is a FloatSlider
|
|
FloatSlider* float_slider = static_cast<FloatSlider*>(sender());
|
|
input->set_value(float_slider->GetValue());
|
|
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());
|
|
input->set_value(line_edit->text());
|
|
break;
|
|
}
|
|
case NodeParam::kBoolean:
|
|
{
|
|
// Widget is a QCheckBox
|
|
QCheckBox* check_box = static_cast<QCheckBox*>(sender());
|
|
input->set_value(check_box->isChecked());
|
|
break;
|
|
}
|
|
case NodeParam::kFont:
|
|
{
|
|
// Widget is a QFontComboBox
|
|
QFontComboBox* font_combobox = static_cast<QFontComboBox*>(sender());
|
|
input->set_value(font_combobox->currentFont());
|
|
break;
|
|
}
|
|
case NodeParam::kFootage:
|
|
{
|
|
// Widget is a FootageComboBox
|
|
FootageComboBox* footage_combobox = static_cast<FootageComboBox*>(sender());
|
|
input->set_value(Node::PtrToValue(footage_combobox->SelectedFootage()));
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|