refactor: cut engine-to-UI include violations ahead of the liboakengine split

- slider DisplayType enums sink to node/sliderdisplaytype.h (canonical
  engine home); FloatSlider/RationalSlider alias them for compatibility
- DropWithoutSequenceBehavior enum sinks to common/dropworkflowbehavior.h
- Config errors now go through a registered ErrorHandler hook instead of
  QMessageBox with a MainWindow parent; the style default no longer
  depends on the UI style manager
- MainWindowLayoutInfo moves to node/project/serializer/ and its panel
  dependency is reduced to a plain std::map alias (PanelLayoutInfo),
  breaking the engine -> PanelWidget -> KDDockWidgets chain
- ProjectImportErrorDialog moves from task/ to dialog/projectimport/
- remove confirmed-redundant UI includes and give project.h/import.h/
  project.cpp the direct includes they were borrowing transitively
- project.h includes folder/sequence headers directly (it used both
  types in its own API all along)
This commit is contained in:
2026-07-20 00:52:12 +08:00
parent 98f2f3e224
commit 03d4087124
71 changed files with 321 additions and 163 deletions
+1 -1
View File
@@ -24,7 +24,7 @@
#include "widget/menu/menushared.h"
#include "window/mainwindow/mainstatusbar.h"
#include "window/mainwindow/mainwindow.h"
#include "window/mainwindow/mainwindowlayoutinfo.h"
#include "node/project/serializer/mainwindowlayoutinfo.h"
using namespace olive;
+2 -2
View File
@@ -227,7 +227,7 @@ TEST(PanNode, InputDefaults)
EXPECT_EQ(int(pan.get_input_property(olive::PanNode::k_panning_input,
QStringLiteral("view"))
.toInt()),
int(olive::FloatSlider::k_percentage));
int(olive::slider::k_percentage));
}
TEST(PanNode, RetranslateSetsInputNames)
@@ -489,7 +489,7 @@ TEST(VolumeNode, InputDefaults)
EXPECT_EQ(int(volume.get_input_property(olive::VolumeNode::k_volume_input,
QStringLiteral("view"))
.toInt()),
int(olive::FloatSlider::k_decibel));
int(olive::slider::k_decibel));
}
TEST(VolumeNode, RetranslateSetsInputNames)
+2 -2
View File
@@ -533,7 +533,7 @@ TEST(CropDistortNode, InputDefinitionsAndDefaults)
EXPECT_DOUBLE_EQ(
node.get_input_property(side, QStringLiteral("max")).toDouble(), 1.0);
EXPECT_EQ(node.get_input_property(side, QStringLiteral("view")).toInt(),
int(olive::FloatSlider::k_percentage));
int(olive::slider::k_percentage));
}
EXPECT_DOUBLE_EQ(
@@ -1521,7 +1521,7 @@ TEST(TileDistortNode, InputDefaults)
EXPECT_EQ(node.get_input_property(olive::TileDistortNode::k_scale_input,
QStringLiteral("view"))
.toInt(),
int(olive::FloatSlider::k_percentage));
int(olive::slider::k_percentage));
EXPECT_EQ(node.get_standard_value(olive::TileDistortNode::k_position_input)
.value<QVector2D>(),
+3 -3
View File
@@ -103,7 +103,7 @@ TEST(OpacityEffect, InputDefinitionsAndDefaults)
EXPECT_EQ(node.get_input_property(olive::OpacityEffect::k_value_input,
QStringLiteral("view"))
.toInt(),
int(olive::FloatSlider::k_percentage));
int(olive::slider::k_percentage));
}
TEST(OpacityEffect, Identity)
@@ -616,7 +616,7 @@ TEST(DropShadowFilter, InputDefinitionsAndDefaults)
EXPECT_EQ(node.get_input_property(olive::DropShadowFilter::k_opacity_input,
QStringLiteral("view"))
.toInt(),
int(olive::FloatSlider::k_percentage));
int(olive::slider::k_percentage));
EXPECT_FALSE(
node.get_standard_value(olive::DropShadowFilter::k_fast_input).toBool());
}
@@ -933,7 +933,7 @@ TEST(StrokeFilterNode, InputDefinitionsAndDefaults)
EXPECT_EQ(node.get_input_property(olive::StrokeFilterNode::k_opacity_input,
QStringLiteral("view"))
.toInt(),
int(olive::FloatSlider::k_percentage));
int(olive::slider::k_percentage));
EXPECT_FALSE(
node.get_standard_value(olive::StrokeFilterNode::k_inner_input).toBool());
}
+2 -2
View File
@@ -171,7 +171,7 @@ TEST(MatrixGenerator, InputDefaultsAndProperties)
EXPECT_EQ(node->get_input_property(olive::MatrixGenerator::k_scale_input,
QStringLiteral("view"))
.toInt(),
int(olive::FloatSlider::k_percentage));
int(olive::slider::k_percentage));
EXPECT_EQ(node->get_input_property(olive::MatrixGenerator::k_scale_input,
QStringLiteral("min"))
.value<QVector2D>(),
@@ -676,7 +676,7 @@ TEST(NoiseGenerator, InputDefaults)
EXPECT_EQ(node->get_input_property(olive::NoiseGeneratorNode::k_strength_input,
QStringLiteral("view"))
.toInt(),
int(olive::FloatSlider::k_percentage));
int(olive::slider::k_percentage));
EXPECT_EQ(int(node->get_input_data_type(olive::NoiseGeneratorNode::k_color_input)),
int(olive::NodeValue::k_boolean));
+1 -1
View File
@@ -19,7 +19,7 @@
#include "node/project/serializer/serializer.h"
#include "render/diskmanager.h"
#include "task/project/import/import.h"
#include "task/project/import/importerrordialog.h"
#include "dialog/projectimport/projectimporterrordialog.h"
#include "task/project/load/load.h"
#include "undo/undocommand.h"
+16 -16
View File
@@ -105,43 +105,43 @@ TEST(WidgetSlider, FloatRangeChangeClampsExistingValue)
TEST(WidgetSlider, FloatDisplayTransformRoundTrips)
{
EXPECT_DOUBLE_EQ(
olive::FloatSlider::transform_value_to_display(0.5, olive::FloatSlider::k_percentage),
olive::FloatSlider::transform_value_to_display(0.5, olive::slider::k_percentage),
50.0);
EXPECT_DOUBLE_EQ(
olive::FloatSlider::transform_display_to_value(50.0, olive::FloatSlider::k_percentage),
olive::FloatSlider::transform_display_to_value(50.0, olive::slider::k_percentage),
0.5);
EXPECT_DOUBLE_EQ(
olive::FloatSlider::transform_value_to_display(1.0, olive::FloatSlider::k_decibel),
olive::FloatSlider::transform_value_to_display(1.0, olive::slider::k_decibel),
0.0);
EXPECT_NEAR(
olive::FloatSlider::transform_value_to_display(0.5, olive::FloatSlider::k_decibel),
olive::FloatSlider::transform_value_to_display(0.5, olive::slider::k_decibel),
-6.0206, 0.001);
EXPECT_NEAR(
olive::FloatSlider::transform_display_to_value(
olive::FloatSlider::transform_value_to_display(0.75, olive::FloatSlider::k_decibel),
olive::FloatSlider::k_decibel),
olive::FloatSlider::transform_value_to_display(0.75, olive::slider::k_decibel),
olive::slider::k_decibel),
0.75, 1e-12);
EXPECT_DOUBLE_EQ(
olive::FloatSlider::transform_value_to_display(3.5, olive::FloatSlider::k_normal),
olive::FloatSlider::transform_value_to_display(3.5, olive::slider::k_normal),
3.5);
EXPECT_DOUBLE_EQ(
olive::FloatSlider::transform_display_to_value(3.5, olive::FloatSlider::k_normal),
olive::FloatSlider::transform_display_to_value(3.5, olive::slider::k_normal),
3.5);
}
TEST(WidgetSlider, FloatStaticValueToStringRespectsDisplayType)
{
// Zero volume in decibel mode displays as an infinity symbol (U+221E)
EXPECT_EQ(olive::FloatSlider::value_to_string(0.0, olive::FloatSlider::k_decibel, 2,
EXPECT_EQ(olive::FloatSlider::value_to_string(0.0, olive::slider::k_decibel, 2,
false),
QString(QChar(0x221E)));
EXPECT_EQ(olive::FloatSlider::value_to_string(0.5, olive::FloatSlider::k_percentage,
EXPECT_EQ(olive::FloatSlider::value_to_string(0.5, olive::slider::k_percentage,
1, false),
QStringLiteral("50.0"));
EXPECT_EQ(olive::FloatSlider::value_to_string(1.234, olive::FloatSlider::k_normal,
EXPECT_EQ(olive::FloatSlider::value_to_string(1.234, olive::slider::k_normal,
2, false),
QStringLiteral("1.23"));
}
@@ -155,14 +155,14 @@ TEST(WidgetSlider, FloatLabelShowsFormattedValue)
s.set_value(0.5);
EXPECT_EQ(label->text(), QStringLiteral("0.50"));
s.set_display_type(olive::FloatSlider::k_percentage);
s.set_display_type(olive::slider::k_percentage);
EXPECT_EQ(label->text(), QStringLiteral("50.00%"));
s.set_format(QStringLiteral("%1 px"));
EXPECT_EQ(label->text(), QStringLiteral("50.00 px"));
s.clear_format();
s.set_display_type(olive::FloatSlider::k_normal);
s.set_display_type(olive::slider::k_normal);
EXPECT_EQ(label->text(), QStringLiteral("0.50"));
}
@@ -191,7 +191,7 @@ TEST(WidgetSlider, FloatStringToValueRejectsGarbage)
TEST(WidgetSlider, FloatStringToValueRespectsDisplayType)
{
ExposedFloatSlider s;
s.set_display_type(olive::FloatSlider::k_percentage);
s.set_display_type(olive::slider::k_percentage);
bool ok = false;
QVariant v = s.string_to_value_public(QStringLiteral("50"), &ok);
@@ -207,11 +207,11 @@ TEST(WidgetSlider, FloatDragDistanceRespectsDisplayType)
EXPECT_DOUBLE_EQ(s.adjust_drag_public(1.0, 2.5).toDouble(), 3.5);
// Percentage: drag is scaled by 1/100
s.set_display_type(olive::FloatSlider::k_percentage);
s.set_display_type(olive::slider::k_percentage);
EXPECT_DOUBLE_EQ(s.adjust_drag_public(0.5, 10.0).toDouble(), 0.6);
// Decibel: drag happens in dB space
s.set_display_type(olive::FloatSlider::k_decibel);
s.set_display_type(olive::slider::k_decibel);
const double expected =
olive::Decibel::to_linear(olive::Decibel::from_linear(1.0) + 6.0);
EXPECT_DOUBLE_EQ(s.adjust_drag_public(1.0, 6.0).toDouble(), expected);