diff --git a/nodes/medianode.cpp b/nodes/medianode.cpp new file mode 100644 index 000000000..c844a1c59 --- /dev/null +++ b/nodes/medianode.cpp @@ -0,0 +1,6 @@ +#include "medianode.h" + +MediaNode::MediaNode() +{ + +} diff --git a/nodes/medianode.h b/nodes/medianode.h new file mode 100644 index 000000000..96dd94ecc --- /dev/null +++ b/nodes/medianode.h @@ -0,0 +1,12 @@ +#ifndef MEDIANODE_H +#define MEDIANODE_H + +#include "node.h" + +class MediaNode : public Node +{ +public: + MediaNode(); +}; + +#endif // MEDIANODE_H diff --git a/nodes/node.cpp b/nodes/node.cpp new file mode 100644 index 000000000..c74e03749 --- /dev/null +++ b/nodes/node.cpp @@ -0,0 +1,7 @@ +#include "node.h" + +Node::Node() : + max_inputs_(INT_MAX), + max_outputs_(INT_MAX) +{ +} diff --git a/nodes/node.h b/nodes/node.h new file mode 100644 index 000000000..752a55b34 --- /dev/null +++ b/nodes/node.h @@ -0,0 +1,31 @@ +#ifndef NODE_H +#define NODE_H + +#include +#include + +class NodeInput { +public: + NodeInput(); + +private: + QString name_; + +}; + +class Node : public QObject +{ + Q_OBJECT +public: + Node(); + +private: + int max_inputs_; + QVector inputs_; + + int max_outputs_; + QVector outputs_; + +}; + +#endif // NODE_H diff --git a/olive.pro b/olive.pro index a3db45409..c55c3bb6c 100644 --- a/olive.pro +++ b/olive.pro @@ -184,7 +184,11 @@ SOURCES += \ global/clipboard.cpp \ timeline/timelinetools.cpp \ timeline/ghost.cpp \ - ui/waveform.cpp + ui/waveform.cpp \ + panels/nodeeditor.cpp \ + ui/nodeview.cpp \ + nodes/medianode.cpp \ + nodes/node.cpp HEADERS += \ ui/mainwindow.h \ @@ -325,7 +329,11 @@ HEADERS += \ ui/timelinelabel.h \ global/clipboard.h \ timeline/timelinetools.h \ - ui/waveform.h + ui/waveform.h \ + panels/nodeeditor.h \ + ui/nodeview.h \ + nodes/medianode.h \ + nodes/node.h FORMS += diff --git a/panels/nodeeditor.cpp b/panels/nodeeditor.cpp new file mode 100644 index 000000000..1eb5906d8 --- /dev/null +++ b/panels/nodeeditor.cpp @@ -0,0 +1,29 @@ +#include "nodeeditor.h" + +#include +#include +#include + +NodeEditor::NodeEditor(QWidget *parent) : + Panel(parent), + view_(&scene_) +{ + resize(720, 480); + + QWidget* central_widget = new QWidget(); + setWidget(central_widget); + + QVBoxLayout* layout = new QVBoxLayout(central_widget); + layout->addWidget(&view_); + + view_.setInteractive(true); + view_.setDragMode(QGraphicsView::RubberBandDrag); + + QPushButton* push_button = new QPushButton("heck!!!"); + scene_.addWidget(push_button); +} + +void NodeEditor::Retranslate() +{ + +} diff --git a/panels/nodeeditor.h b/panels/nodeeditor.h new file mode 100644 index 000000000..eaf77c586 --- /dev/null +++ b/panels/nodeeditor.h @@ -0,0 +1,22 @@ +#ifndef NODEEDITOR_H +#define NODEEDITOR_H + +#include + +#include "ui/panel.h" +#include "ui/nodeview.h" + +class NodeEditor : public Panel { + Q_OBJECT +public: + NodeEditor(QWidget* parent = nullptr); + + virtual void Retranslate() override; + +private: + QGraphicsScene scene_; + NodeView view_; + +}; + +#endif // NODEEDITOR_H diff --git a/panels/panels.cpp b/panels/panels.cpp index 6fb3455f8..60ec67816 100644 --- a/panels/panels.cpp +++ b/panels/panels.cpp @@ -36,6 +36,7 @@ Viewer* panel_sequence_viewer = nullptr; Viewer* panel_footage_viewer = nullptr; QVector panel_timeline; GraphEditor* panel_graph_editor = nullptr; +NodeEditor* panel_node_editor = nullptr; void update_ui(bool modified) { if (modified) { @@ -86,6 +87,8 @@ void alloc_panels(QWidget* parent) { panel_timeline.append(first_timeline_panel); panel_graph_editor = new GraphEditor(parent); panel_graph_editor->setObjectName("graph_editor"); + panel_node_editor = new NodeEditor(parent); + panel_node_editor->setObjectName("node_editor"); } void free_panels() { diff --git a/panels/panels.h b/panels/panels.h index 3cf3be584..70af99b75 100644 --- a/panels/panels.h +++ b/panels/panels.h @@ -26,6 +26,7 @@ #include "viewer.h" #include "grapheditor.h" #include "project.h" +#include "nodeeditor.h" extern QVector panel_project; extern EffectControls* panel_effect_controls; @@ -33,6 +34,7 @@ extern Viewer* panel_sequence_viewer; extern Viewer* panel_footage_viewer; extern QVector panel_timeline; extern GraphEditor* panel_graph_editor; +extern NodeEditor* panel_node_editor; void update_ui(bool modified); QDockWidget* get_focused_panel(bool force_hover = false); diff --git a/ui/mainwindow.cpp b/ui/mainwindow.cpp index 927aa26c9..153080f88 100644 --- a/ui/mainwindow.cpp +++ b/ui/mainwindow.cpp @@ -148,6 +148,7 @@ void MainWindow::setup_layout(bool reset) { addDockWidget(Qt::TopDockWidgetArea, panel_project.first()); addDockWidget(Qt::TopDockWidgetArea, panel_graph_editor); + addDockWidget(Qt::TopDockWidgetArea, panel_node_editor); addDockWidget(Qt::TopDockWidgetArea, panel_footage_viewer); tabifyDockWidget(panel_footage_viewer, panel_effect_controls); panel_footage_viewer->raise(); @@ -160,6 +161,7 @@ void MainWindow::setup_layout(bool reset) { panel_sequence_viewer->show(); panel_timeline.first()->show(); panel_graph_editor->hide(); + panel_node_editor->hide(); panel_project.first()->setFloating(false); panel_effect_controls->setFloating(false); @@ -167,6 +169,7 @@ void MainWindow::setup_layout(bool reset) { panel_sequence_viewer->setFloating(false); panel_timeline.first()->setFloating(false); panel_graph_editor->setFloating(true); + panel_node_editor->setFloating(true); resizeDocks({panel_project.first(), panel_footage_viewer, panel_sequence_viewer}, {width()/3, width()/3, width()/3}, @@ -694,6 +697,10 @@ void MainWindow::setup_menus() { window_graph_editor_action->setCheckable(true); window_graph_editor_action->setData(reinterpret_cast(panel_graph_editor)); + window_node_editor_action = MenuHelper::create_menu_action(window_menu, "panelnodeeditor", this, SLOT(toggle_panel_visibility())); + window_node_editor_action->setCheckable(true); + window_node_editor_action->setData(reinterpret_cast(panel_node_editor)); + window_footageviewer_action = MenuHelper::create_menu_action(window_menu, "panelfootageviewer", this, SLOT(toggle_panel_visibility())); window_footageviewer_action->setCheckable(true); window_footageviewer_action->setData(reinterpret_cast(panel_footage_viewer)); @@ -887,6 +894,7 @@ void MainWindow::Retranslate() window_effectcontrols_action->setText(tr("Effect Controls")); window_timeline_action->setText(tr("Timeline")); window_graph_editor_action->setText(tr("Graph Editor")); + window_node_editor_action->setText(tr("Node Editor")); window_footageviewer_action->setText(tr("Media Viewer")); window_sequenceviewer_action->setText(tr("Sequence Viewer")); diff --git a/ui/mainwindow.h b/ui/mainwindow.h index 264e83868..722e575e5 100644 --- a/ui/mainwindow.h +++ b/ui/mainwindow.h @@ -308,6 +308,7 @@ private: QAction* window_effectcontrols_action; QAction* window_timeline_action; QAction* window_graph_editor_action; + QAction* window_node_editor_action; QAction* window_footageviewer_action; QAction* window_sequenceviewer_action; diff --git a/ui/nodeview.cpp b/ui/nodeview.cpp new file mode 100644 index 000000000..16593f328 --- /dev/null +++ b/ui/nodeview.cpp @@ -0,0 +1,35 @@ +#include "nodeview.h" + +#include +#include + +NodeView::NodeView(QGraphicsScene *scene, QWidget *parent) : + QGraphicsView(scene, parent), + hand_moving_(false) +{ + setMouseTracking(true); + setWindowTitle(tr("Node Editor")); +} + +void NodeView::mousePressEvent(QMouseEvent *event) +{ + QGraphicsView::mousePressEvent(event); +} + +void NodeView::mouseMoveEvent(QMouseEvent *event) +{ + QGraphicsView::mouseMoveEvent(event); +} + +void NodeView::mouseReleaseEvent(QMouseEvent *event) +{ +} + +void NodeView::wheelEvent(QWheelEvent *event) +{ + if (event->angleDelta().y() > 0) { + scale(0.9, 0.9); + } else { + scale(1.1, 1.1); + } +} diff --git a/ui/nodeview.h b/ui/nodeview.h new file mode 100644 index 000000000..bd751aa4c --- /dev/null +++ b/ui/nodeview.h @@ -0,0 +1,23 @@ +#ifndef NODEVIEW_H +#define NODEVIEW_H + +#include + +class NodeView : public QGraphicsView { + Q_OBJECT +public: + NodeView(QGraphicsScene *scene, QWidget* parent = nullptr); + +protected: + virtual void mousePressEvent(QMouseEvent *event) override; + virtual void mouseMoveEvent(QMouseEvent *event) override; + virtual void mouseReleaseEvent(QMouseEvent *event) override; + virtual void wheelEvent(QWheelEvent *event) override; + +private: + bool hand_moving_; + QPoint drag_start_; + +}; + +#endif // NODEVIEW_H