From a2aead8c5c431271bd3363ffc3c3ebd8f1ea9d1e Mon Sep 17 00:00:00 2001 From: Matthias Koefferlein Date: Sun, 12 Feb 2023 22:10:27 +0100 Subject: [PATCH] Fixed issue #1287 The problem was introduced during implementation of multi-segment rulers. This patch also fixes the tab order of the ruler properties dialog and adds some tests. --- src/ant/ant/RulerPropertiesPage.ui | 26 ++++++++- src/ant/ant/antObject.cc | 4 +- src/ant/unit_tests/antBasicTests.cc | 83 +++++++++++++++++++++++++++++ 3 files changed, 110 insertions(+), 3 deletions(-) diff --git a/src/ant/ant/RulerPropertiesPage.ui b/src/ant/ant/RulerPropertiesPage.ui index 28451b680..79bfd6636 100644 --- a/src/ant/ant/RulerPropertiesPage.ui +++ b/src/ant/ant/RulerPropertiesPage.ui @@ -6,7 +6,7 @@ 0 0 - 622 + 669 621 @@ -1142,10 +1142,34 @@ + fmt_le + main_position + main_xalign + main_yalign fmt_x_le + xlabel_xalign + xlabel_yalign fmt_y_le + ylabel_xalign + ylabel_yalign style_cb outline_cb + segments_tab + x0 + y0 + x1 + y1 + x2 + y2 + swap_points + p1_to_layout + p2_to_layout + both_to_layout + dx + dy + dd + point_list + points_edit diff --git a/src/ant/ant/antObject.cc b/src/ant/ant/antObject.cc index 6cd43291c..805c5afff 100644 --- a/src/ant/ant/antObject.cc +++ b/src/ant/ant/antObject.cc @@ -331,7 +331,7 @@ Object::seg_p2 (size_t seg_index, const db::DPoint &p) void Object::p1 (const db::DPoint &p) { - if (! p1 ().equal (p)) { + if (m_points.size () < 1 || ! p1 ().equal (p)) { if (m_points.size () < 1) { m_points.push_back (p); } else { @@ -348,7 +348,7 @@ Object::p1 (const db::DPoint &p) void Object::p2 (const db::DPoint &p) { - if (! p2 ().equal (p)) { + if (m_points.size () < 2 || ! p2 ().equal (p)) { if (m_points.size () < 2) { if (m_points.empty ()) { m_points.push_back (db::DPoint ()); diff --git a/src/ant/unit_tests/antBasicTests.cc b/src/ant/unit_tests/antBasicTests.cc index 5802ffb4f..8302fb1c4 100644 --- a/src/ant/unit_tests/antBasicTests.cc +++ b/src/ant/unit_tests/antBasicTests.cc @@ -25,6 +25,8 @@ #include "antObject.h" #include "antTemplate.h" +// NOTE: most tests are in ruby/antTest.rb + TEST(1) { ant::Template tmp = ant::Template ("title", "fmt_x", "fmt_y", "fmt", @@ -48,3 +50,84 @@ TEST(1) EXPECT_EQ (a.category (), "cat"); } +TEST(2) +{ + ant::Template tmp = ant::Template ("title", "fmt_x", "fmt_y", "fmt", + ant::Object::STY_arrow_both, + ant::Object::OL_diag_xy, + true, + lay::AC_Ortho, + "cat"); + + ant::Object obj; + + EXPECT_EQ (obj.p1 ().to_string (), "0,0"); + EXPECT_EQ (obj.p2 ().to_string (), "0,0"); + + EXPECT_EQ (int (obj.segments ()), 1); + EXPECT_EQ (int (obj.points ().size ()), 0); + + obj.p1 (db::DPoint (1, 2)); + + EXPECT_EQ (obj.p1 ().to_string (), "1,2"); + EXPECT_EQ (obj.p2 ().to_string (), "1,2"); + + EXPECT_EQ (int (obj.segments ()), 1); + EXPECT_EQ (int (obj.points ().size ()), 1); + + obj.p2 (db::DPoint (2, 3)); + + EXPECT_EQ (obj.p1 ().to_string (), "1,2"); + EXPECT_EQ (obj.p2 ().to_string (), "2,3"); + + EXPECT_EQ (int (obj.segments ()), 1); + EXPECT_EQ (int (obj.points ().size ()), 2); + + obj = ant::Object (); + + EXPECT_EQ (obj.p1 ().to_string (), "0,0"); + EXPECT_EQ (obj.p2 ().to_string (), "0,0"); + + EXPECT_EQ (int (obj.segments ()), 1); + EXPECT_EQ (int (obj.points ().size ()), 0); + + obj.p1 (db::DPoint ()); + + EXPECT_EQ (obj.p1 ().to_string (), "0,0"); + EXPECT_EQ (obj.p2 ().to_string (), "0,0"); + + EXPECT_EQ (int (obj.segments ()), 1); + EXPECT_EQ (int (obj.points ().size ()), 1); + + obj.p2 (db::DPoint ()); + + EXPECT_EQ (obj.p1 ().to_string (), "0,0"); + EXPECT_EQ (obj.p2 ().to_string (), "0,0"); + + EXPECT_EQ (int (obj.segments ()), 1); + EXPECT_EQ (int (obj.points ().size ()), 1); + + obj = ant::Object (db::DPoint (1, 2), db::DPoint (2, 3), 0, tmp); + + EXPECT_EQ (obj.p1 ().to_string (), "1,2"); + EXPECT_EQ (obj.p2 ().to_string (), "2,3"); + + EXPECT_EQ (int (obj.segments ()), 1); + EXPECT_EQ (int (obj.points ().size ()), 2); + + obj = ant::Object (db::DPoint (1, 2), db::DPoint (1, 2), 0, tmp); + + EXPECT_EQ (obj.p1 ().to_string (), "1,2"); + EXPECT_EQ (obj.p2 ().to_string (), "1,2"); + + EXPECT_EQ (int (obj.segments ()), 1); + EXPECT_EQ (int (obj.points ().size ()), 1); + + obj = ant::Object (db::DPoint (), db::DPoint (), 0, tmp); + + EXPECT_EQ (obj.p1 ().to_string (), "0,0"); + EXPECT_EQ (obj.p2 ().to_string (), "0,0"); + + EXPECT_EQ (int (obj.segments ()), 1); + EXPECT_EQ (int (obj.points ().size ()), 1); +}