From f218c009a0c870e6e6442aefc53a81ec1d936bef Mon Sep 17 00:00:00 2001 From: Matthias Koefferlein Date: Thu, 8 Aug 2024 23:26:05 +0200 Subject: [PATCH 1/2] Fixed bug #1823 (select_all not working) 1. Fixed "LayoutView#select_all" 2. Box selection now will select texts at their origin again: this way it is included in the bounding box. Point mode still takes the text's glyph area. --- .../laybasic/gsiDeclLayLayoutViewBase.cc | 2 +- src/laybasic/laybasic/layEditable.cc | 17 ----------------- src/laybasic/laybasic/layEditable.h | 5 ----- src/laybasic/laybasic/layFinder.cc | 2 +- src/laybasic/laybasic/layLayoutViewBase.cc | 6 ++++++ src/laybasic/laybasic/layLayoutViewBase.h | 5 +++++ src/layui/layui/layLayoutViewFunctions.cc | 2 +- 7 files changed, 14 insertions(+), 25 deletions(-) diff --git a/src/laybasic/laybasic/gsiDeclLayLayoutViewBase.cc b/src/laybasic/laybasic/gsiDeclLayLayoutViewBase.cc index a36fd04682..2c994a69dc 100644 --- a/src/laybasic/laybasic/gsiDeclLayLayoutViewBase.cc +++ b/src/laybasic/laybasic/gsiDeclLayLayoutViewBase.cc @@ -1058,7 +1058,7 @@ LAYBASIC_PUBLIC Class decl_LayoutViewBase ("lay", "LayoutVi "\n" "This method has been introduced in version 0.26.2\n" ) + - gsi::method ("select_all", (void (lay::LayoutViewBase::*) ()) &lay::LayoutViewBase::select, + gsi::method ("select_all", (void (lay::LayoutViewBase::*) ()) &lay::LayoutViewBase::select_all, "@brief Selects all objects from the view\n" "\n" "This method has been introduced in version 0.27\n" diff --git a/src/laybasic/laybasic/layEditable.cc b/src/laybasic/laybasic/layEditable.cc index 2476caddde..17cc210d39 100644 --- a/src/laybasic/laybasic/layEditable.cc +++ b/src/laybasic/laybasic/layEditable.cc @@ -369,23 +369,6 @@ Editables::clear_selection () } } -void -Editables::select () -{ - cancel_edits (); - clear_transient_selection (); - clear_previous_selection (); - - for (iterator e = begin (); e != end (); ++e) { - if (m_enabled.find (&*e) != m_enabled.end ()) { - e->select (db::DBox (), lay::Editable::Replace); // select "all" - } - } - - // send a signal to the observers - signal_selection_changed (); -} - void Editables::select (const db::DBox &box, lay::Editable::SelectionMode mode) { diff --git a/src/laybasic/laybasic/layEditable.h b/src/laybasic/laybasic/layEditable.h index 77107a0d7b..4862239818 100644 --- a/src/laybasic/laybasic/layEditable.h +++ b/src/laybasic/laybasic/layEditable.h @@ -507,11 +507,6 @@ class LAYBASIC_PUBLIC Editables */ void clear_previous_selection (); - /** - * @brief Select "all" - */ - void select (); - /** * @brief Select geometrically by a rectangle */ diff --git a/src/laybasic/laybasic/layFinder.cc b/src/laybasic/laybasic/layFinder.cc index 52eac2dad1..b874cff6cb 100644 --- a/src/laybasic/laybasic/layFinder.cc +++ b/src/laybasic/laybasic/layFinder.cc @@ -324,7 +324,7 @@ ShapeFinder::find (LayoutViewBase *view, const db::DBox ®ion_mu) m_cells_with_context.clear (); lay::TextInfo text_info (view); - mp_text_info = (m_flags & db::ShapeIterator::Texts) != 0 ? &text_info : 0; + mp_text_info = (m_flags & db::ShapeIterator::Texts) != 0 && point_mode () ? &text_info : 0; std::vector lprops; for (lay::LayerPropertiesConstIterator lp = view->begin_layers (); ! lp.at_end (); ++lp) { diff --git a/src/laybasic/laybasic/layLayoutViewBase.cc b/src/laybasic/laybasic/layLayoutViewBase.cc index 108644c5e1..9f71719d7f 100644 --- a/src/laybasic/laybasic/layLayoutViewBase.cc +++ b/src/laybasic/laybasic/layLayoutViewBase.cc @@ -3753,6 +3753,12 @@ LayoutViewBase::full_box () const return bbox; } +void +LayoutViewBase::select_all () +{ + select (full_box (), lay::Editable::Replace); +} + void LayoutViewBase::zoom_fit () { diff --git a/src/laybasic/laybasic/layLayoutViewBase.h b/src/laybasic/laybasic/layLayoutViewBase.h index c6181b6b9b..d70da120e7 100644 --- a/src/laybasic/laybasic/layLayoutViewBase.h +++ b/src/laybasic/laybasic/layLayoutViewBase.h @@ -2623,6 +2623,11 @@ class LAYBASIC_PUBLIC LayoutViewBase : */ db::DBox full_box () const; + /** + * @brief Selects everything + */ + void select_all (); + /** * @brief Gets called when a menu item is activated */ diff --git a/src/layui/layui/layLayoutViewFunctions.cc b/src/layui/layui/layLayoutViewFunctions.cc index 01a133436c..7cbe986859 100644 --- a/src/layui/layui/layLayoutViewFunctions.cc +++ b/src/layui/layui/layLayoutViewFunctions.cc @@ -135,7 +135,7 @@ LayoutViewFunctions::menu_activated (const std::string &symbol) } else if (symbol == "cm_unselect_all") { view ()->select (db::DBox (), lay::Editable::Reset); } else if (symbol == "cm_select_all") { - view ()->select (view ()->full_box (), lay::Editable::Replace); + view ()->select_all (); } else if (symbol == "cm_select_next_item") { view ()->repeat_selection (lay::Editable::Replace); } else if (symbol == "cm_select_next_item_add") { From 3e0d0ad444146af167f4987fa1cabec3eb2c1ec6 Mon Sep 17 00:00:00 2001 From: Matthias Koefferlein Date: Fri, 9 Aug 2024 17:20:40 +0200 Subject: [PATCH 2/2] Added tests, fixed others --- testdata/ruby/layLayoutView.rb | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/testdata/ruby/layLayoutView.rb b/testdata/ruby/layLayoutView.rb index 7a03c05b49..cc07b20216 100644 --- a/testdata/ruby/layLayoutView.rb +++ b/testdata/ruby/layLayoutView.rb @@ -187,16 +187,22 @@ def test_2 view.set_config("search-range", "0") view.select_from(RBA::DBox::new(-2.5, -2.5, 2.5, 2.5)) assert_equal(selection_changed, 1) - assert_equal(view.selection_size, 2) + assert_equal(view.selection_size, 4) assert_equal(view.has_selection?, true) view.select_from(RBA::DPoint::new(0, 0), RBA::LayoutView::Invert) assert_equal(selection_changed, 2) - assert_equal(view.selection_size, 3) + assert_equal(view.selection_size, 5) assert_equal(view.has_selection?, true) view.clear_selection - assert_equal(selection_changed, 3) + view.select_all + assert_equal(selection_changed, 4) + assert_equal(view.has_selection?, true) + assert_equal(view.selection_size, 20) + + view.clear_selection + assert_equal(selection_changed, 5) assert_equal(view.has_selection?, false) assert_equal(view.selection_size, 0) selection_changed = 0