@@ -4817,6 +4817,88 @@ Descriptor::Properties DbScanPartitionDescriptor::getDBProperties(
48174817
48184818// ////////////////////////////////////////////////
48194819
4820+ DbScanChainDescriptor::DbScanChainDescriptor (odb::dbDatabase* db)
4821+ : BaseDbDescriptor<odb::dbScanChain>(db)
4822+ {
4823+ }
4824+
4825+ std::string DbScanChainDescriptor::getName (std::any object) const
4826+ {
4827+ auto scan_chain = getObject (object);
4828+ return scan_chain->getName ();
4829+ }
4830+
4831+ std::string DbScanChainDescriptor::getTypeName () const
4832+ {
4833+ return " Scan Chain" ;
4834+ }
4835+
4836+ bool DbScanChainDescriptor::getBBox (std::any object, odb::Rect& bbox) const
4837+ {
4838+ auto scan_chain = getObject (object);
4839+ auto * scan_partition_descriptor
4840+ = Gui::get ()->getDescriptor <odb::dbScanPartition*>();
4841+ bbox.mergeInit ();
4842+
4843+ for (auto * scan_partition : scan_chain->getScanPartitions ()) {
4844+ odb::Rect scan_partition_bbox;
4845+ if (scan_partition_descriptor->getBBox (scan_partition,
4846+ scan_partition_bbox)) {
4847+ bbox.merge (scan_partition_bbox);
4848+ }
4849+ }
4850+
4851+ return !bbox.isInverted ();
4852+ }
4853+
4854+ void DbScanChainDescriptor::highlight (std::any object, Painter& painter) const
4855+ {
4856+ auto scan_chain = getObject (object);
4857+
4858+ for (auto * scan_partition : scan_chain->getScanPartitions ()) {
4859+ auto * scan_partition_descriptor
4860+ = Gui::get ()->getDescriptor <odb::dbScanPartition*>();
4861+ scan_partition_descriptor->highlight (scan_partition, painter);
4862+ }
4863+ }
4864+
4865+ bool DbScanChainDescriptor::getAllObjects (SelectionSet& objects) const
4866+ {
4867+ auto * block = db_->getChip ()->getBlock ();
4868+ auto * db_dft = block->getDft ();
4869+
4870+ for (auto * scan_chain : db_dft->getScanChains ()) {
4871+ objects.insert (makeSelected (scan_chain));
4872+ }
4873+
4874+ return true ;
4875+ }
4876+
4877+ Descriptor::Properties DbScanChainDescriptor::getDBProperties (
4878+ odb::dbScanChain* scan_chain) const
4879+ {
4880+ Properties props;
4881+
4882+ props.push_back (
4883+ DbScanInstDescriptor::getScanPinProperty (" In" , scan_chain->getScanIn ()));
4884+ props.push_back (DbScanInstDescriptor::getScanPinProperty (
4885+ " Out" , scan_chain->getScanOut ()));
4886+ props.push_back (DbScanInstDescriptor::getScanPinProperty (
4887+ " Enable" , scan_chain->getScanEnable ()));
4888+
4889+ auto gui = Gui::get ();
4890+
4891+ SelectionSet scan_partitions;
4892+ for (auto * scan_partition : scan_chain->getScanPartitions ()) {
4893+ scan_partitions.insert (gui->makeSelected (scan_partition));
4894+ }
4895+ props.push_back ({" Scan Partitions" , scan_partitions});
4896+
4897+ return props;
4898+ }
4899+
4900+ // ////////////////////////////////////////////////
4901+
48204902DbBoxDescriptor::DbBoxDescriptor (odb::dbDatabase* db)
48214903 : BaseDbDescriptor<odb::dbBox>(db)
48224904{
0 commit comments