diff --git a/src/layui/layui/rdbMarkerBrowserDialog.cc b/src/layui/layui/rdbMarkerBrowserDialog.cc index ed0dd5c45..ccfa15386 100644 --- a/src/layui/layui/rdbMarkerBrowserDialog.cc +++ b/src/layui/layui/rdbMarkerBrowserDialog.cc @@ -582,7 +582,13 @@ MarkerBrowserDialog::rdbs_changed () for (unsigned int i = 0; i < view ()->num_rdbs (); ++i) { const rdb::Database *rdb = view ()->get_rdb (i); - mp_ui->rdb_cb->addItem (tl::to_qstring (rdb->name ())); + std::string text = rdb->name (); + if (! rdb->description ().empty ()) { + text += " ("; + text += rdb->description (); + text += ")"; + } + mp_ui->rdb_cb->addItem (tl::to_qstring (text)); if (rdb->name () == m_rdb_name) { rdb_index = i; } @@ -761,23 +767,35 @@ MarkerBrowserDialog::scan_layer () std::string desc; for (std::vector::const_iterator l = layers.begin (); l != layers.end (); ++l) { - if (!(*l)->has_children () && (*l)->cellview_index () >= 0 && layout.is_valid_layer ((*l)->layer_index ())) { + if (!(*l)->has_children () && (*l)->cellview_index () == cv_index && layout.is_valid_layer ((*l)->layer_index ())) { if (! desc.empty ()) { desc += ", "; } desc += layout.get_properties ((*l)->layer_index ()).to_string (); } } - rdb->set_description ("Shapes of layer(s) " + desc); + desc = tl::to_string (tr ("Hierarchical shapes of layer(s) ")) + desc; + desc += " "; + desc += tl::to_string (tr ("from cell ")); + desc += cv->layout ().cell_name (cv.cell_index ()); + rdb->set_description (desc); + + std::set called_cells; + called_cells.insert (cv.cell_index ()); + cv->layout ().cell (cv.cell_index ()).collect_called_cells (called_cells); for (std::vector::const_iterator l = layers.begin (); l != layers.end (); ++l) { - if (!(*l)->has_children () && (*l)->cellview_index () >= 0 && layout.is_valid_layer ((*l)->layer_index ())) { + if (!(*l)->has_children () && (*l)->cellview_index () == cv_index && layout.is_valid_layer ((*l)->layer_index ())) { - rdb::Category *cat = rdb->create_category (layout.get_properties ((*l)->layer_index ()).to_string ()); + rdb::Category *cat = rdb->create_category (layout.get_properties ((*l)->layer_index ()).to_string ()); for (db::Layout::const_iterator cid = layout.begin (); cid != layout.end (); ++cid) { + if (called_cells.find (cid->cell_index ()) == called_cells.end ()) { + continue; + } + const db::Cell &cell = *cid; if (cell.shapes ((*l)->layer_index ()).size () > 0) { @@ -855,18 +873,22 @@ MarkerBrowserDialog::scan_layer_flat () std::string desc; for (std::vector::const_iterator l = layers.begin (); l != layers.end (); ++l) { - if (!(*l)->has_children () && (*l)->cellview_index () >= 0 && layout.is_valid_layer ((*l)->layer_index ())) { + if (!(*l)->has_children () && (*l)->cellview_index () == cv_index && layout.is_valid_layer ((*l)->layer_index ())) { if (! desc.empty ()) { desc += ", "; } desc += layout.get_properties ((*l)->layer_index ()).to_string (); } } - rdb->set_description ("Shapes of layer(s) " + desc); + desc = tl::to_string (tr ("Flat shapes of layer(s) ")) + desc; + desc += " "; + desc += tl::to_string (tr ("from cell ")); + desc += cv->layout ().cell_name (cv.cell_index ()); + rdb->set_description (desc); for (std::vector::const_iterator l = layers.begin (); l != layers.end (); ++l) { - if (!(*l)->has_children () && (*l)->cellview_index () >= 0 && layout.is_valid_layer ((*l)->layer_index ())) { + if (!(*l)->has_children () && (*l)->cellview_index () == cv_index && layout.is_valid_layer ((*l)->layer_index ())) { rdb::Category *cat = rdb->create_category (layout.get_properties ((*l)->layer_index ()).to_string ()); diff --git a/src/layui/layui/rdbMarkerBrowserPage.cc b/src/layui/layui/rdbMarkerBrowserPage.cc index 0b795ccab..0aff85df3 100644 --- a/src/layui/layui/rdbMarkerBrowserPage.cc +++ b/src/layui/layui/rdbMarkerBrowserPage.cc @@ -2148,7 +2148,7 @@ MarkerBrowserPage::do_update_markers () lay::CellView cv = mp_view->cellview (m_cv_index); if (! current_cell && cv.is_valid ()) { - current_cell = mp_database->cell_by_qname (cv->layout ().cell_name (cv.cell_index ())); + current_cell = mp_database->cell_by_qname (cv->layout ().cell_name (cv.ctx_cell_index ())); } std::vector tv = mp_view->cv_transform_variants (m_cv_index); @@ -2182,7 +2182,7 @@ MarkerBrowserPage::do_update_markers () // If we could not find a transformation in the RDB, try to find one in the layout DB: std::pair cc = cv->layout ().cell_by_name (c->name ().c_str ()); if (cc.first) { - std::pair ic = db::find_layout_context (cv->layout (), cc.second, cv.cell_index ()); + std::pair ic = db::find_layout_context (cv->layout (), cc.second, cv.ctx_cell_index ()); if (ic.first) { context.first = true; context.second = db::DCplxTrans (cv->layout ().dbu ()) * db::DCplxTrans (ic.second) * db::DCplxTrans (1.0 / cv->layout ().dbu ()); @@ -2197,7 +2197,7 @@ MarkerBrowserPage::do_update_markers () context = std::pair (true, db::DCplxTrans ()); } else if (! current_cell) { m_error_text = tl::sprintf (tl::to_string (QObject::tr ("Current layout cell '%s' not found in marker database and no path found from marker's cell '%s' to current cell in the layout database.")), - cv->layout ().cell_name (cv.cell_index ()), c->name ()); + cv->layout ().cell_name (cv.ctx_cell_index ()), c->name ()); } else { m_error_text = tl::sprintf (tl::to_string (QObject::tr ("No example instantiation given in marker database for marker's cell '%s' to current cell '%s' and no such path in the layout database either.")), c->name (), current_cell->name ());