engine: internals supporting the facade migration

UndoStack push_pre_executed, FolderAddChild-based true folder moves,
NodeViewDeleteCommand delete-then-reconnect support, event emission
points for the facade event bus, and related internal adjustments.
This commit is contained in:
2026-07-26 22:43:09 +08:00
parent e9f173916f
commit f95590e924
38 changed files with 302 additions and 746 deletions
+33 -16
View File
@@ -33,7 +33,7 @@
#include "node/project/footage/footage.h"
#include "node/project.h"
#include "node/project/sequence/sequence.h"
#include "node/project/serializer/mainwindowlayoutinfo.h"
#include "node/project/serializer/serializedlayoutinfo.h"
#include "task/task.h"
#include "tool/tool.h"
#include "undo/undostack.h"
@@ -304,7 +304,7 @@ public:
* @brief Handler applying a loaded main window layout after a project load
*/
using LoadLayoutHandler =
std::function<void(const MainWindowLayoutInfo &layout)>;
std::function<void(const SerializedLayoutInfo &layout)>;
void set_load_layout_handler(LoadLayoutHandler handler);
/**
@@ -320,6 +320,17 @@ public:
*/
void remove_recently_opened_project(int index);
/**
* @brief Currently open project (may be nullptr)
*
* Read accessor for the C ABI facade (oakengine_app_open_project());
* the UI layer used to read the protected member directly.
*/
Project *open_project() const
{
return open_project_;
}
#ifdef USE_OTIO
/**
* @brief Handler showing the OTIO import options dialog
@@ -410,6 +421,26 @@ public slots:
bool show_otio_import_dialog(const QList<Sequence *> &sequences);
#endif
void add_recovery_project_from_task(Task *task);
public:
/**
* @brief Adds a project to the "open projects" list
*
* (Public for the C ABI facade; was protected while olive::Core derived
* from this class.)
*/
void add_open_project(olive::Project *p, bool add_to_recents = false);
bool add_open_project_from_task(Task *task, bool add_to_recents);
void set_active_project(Project *p);
/**
* @brief Returns the filename of the autorecovery index
*/
static QString get_auto_recovery_index_filename();
signals:
/**
* @brief Signal emitted when the tool is changed from somewhere
@@ -471,15 +502,6 @@ signals:
void active_project_changed(Project *p);
protected:
/**
* @brief Adds a project to the "open projects" list
*/
void add_open_project(olive::Project *p, bool add_to_recents = false);
bool add_open_project_from_task(Task *task, bool add_to_recents);
void set_active_project(Project *p);
/**
* @brief Currently open project
*
@@ -487,11 +509,6 @@ protected:
*/
Project *open_project_;
static QString get_auto_recovery_index_filename();
protected slots:
void add_recovery_project_from_task(Task *task);
private:
/**
* @brief Returns the filename where the recently opened/saved projects should be stored