Skip to content

Commit d6695fc

Browse files
authored
Merge pull request #7917 from AcKoucher/gui-scan-partition-descriptor
gui: add descriptor for dbScanPartition
2 parents 30343b4 + fa631f0 commit d6695fc

File tree

3 files changed

+96
-0
lines changed

3 files changed

+96
-0
lines changed

src/gui/src/dbDescriptors.cpp

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4742,6 +4742,81 @@ Descriptor::Properties DbScanListDescriptor::getDBProperties(
47424742

47434743
//////////////////////////////////////////////////
47444744

4745+
DbScanPartitionDescriptor::DbScanPartitionDescriptor(odb::dbDatabase* db)
4746+
: BaseDbDescriptor<odb::dbScanPartition>(db)
4747+
{
4748+
}
4749+
4750+
std::string DbScanPartitionDescriptor::getName(std::any object) const
4751+
{
4752+
auto scan_partition = getObject(object);
4753+
return scan_partition->getName();
4754+
}
4755+
4756+
std::string DbScanPartitionDescriptor::getTypeName() const
4757+
{
4758+
return "Scan Partition";
4759+
}
4760+
4761+
bool DbScanPartitionDescriptor::getBBox(std::any object, odb::Rect& bbox) const
4762+
{
4763+
auto scan_partition = getObject(object);
4764+
auto* scan_list_descriptor = Gui::get()->getDescriptor<odb::dbScanList*>();
4765+
bbox.mergeInit();
4766+
4767+
for (auto* scan_list : scan_partition->getScanLists()) {
4768+
odb::Rect scan_list_bbox;
4769+
if (scan_list_descriptor->getBBox(scan_list, scan_list_bbox)) {
4770+
bbox.merge(scan_list_bbox);
4771+
}
4772+
}
4773+
4774+
return !bbox.isInverted();
4775+
}
4776+
4777+
void DbScanPartitionDescriptor::highlight(std::any object,
4778+
Painter& painter) const
4779+
{
4780+
auto scan_partition = getObject(object);
4781+
4782+
for (auto* scan_list : scan_partition->getScanLists()) {
4783+
auto* scan_list_descriptor = Gui::get()->getDescriptor<odb::dbScanList*>();
4784+
scan_list_descriptor->highlight(scan_list, painter);
4785+
}
4786+
}
4787+
4788+
bool DbScanPartitionDescriptor::getAllObjects(SelectionSet& objects) const
4789+
{
4790+
auto* block = db_->getChip()->getBlock();
4791+
auto* db_dft = block->getDft();
4792+
4793+
for (auto* scan_chain : db_dft->getScanChains()) {
4794+
for (auto* scan_partition : scan_chain->getScanPartitions()) {
4795+
objects.insert(makeSelected(scan_partition));
4796+
}
4797+
}
4798+
4799+
return true;
4800+
}
4801+
4802+
Descriptor::Properties DbScanPartitionDescriptor::getDBProperties(
4803+
odb::dbScanPartition* scan_partition) const
4804+
{
4805+
Properties props;
4806+
4807+
auto gui = Gui::get();
4808+
4809+
SelectionSet scan_lists;
4810+
for (odb::dbScanList* scan_list : scan_partition->getScanLists()) {
4811+
scan_lists.insert(gui->makeSelected(scan_list));
4812+
}
4813+
props.push_back({"Scan Lists", scan_lists});
4814+
4815+
return props;
4816+
}
4817+
4818+
//////////////////////////////////////////////////
4819+
47454820
DbBoxDescriptor::DbBoxDescriptor(odb::dbDatabase* db)
47464821
: BaseDbDescriptor<odb::dbBox>(db)
47474822
{

src/gui/src/dbDescriptors.h

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -757,6 +757,25 @@ class DbScanListDescriptor : public BaseDbDescriptor<odb::dbScanList>
757757
Properties getDBProperties(odb::dbScanList* scan_list) const override;
758758
};
759759

760+
class DbScanPartitionDescriptor : public BaseDbDescriptor<odb::dbScanPartition>
761+
{
762+
public:
763+
DbScanPartitionDescriptor(odb::dbDatabase* db);
764+
765+
std::string getName(std::any object) const override;
766+
std::string getTypeName() const override;
767+
768+
bool getBBox(std::any object, odb::Rect& bbox) const override;
769+
770+
void highlight(std::any object, Painter& painter) const override;
771+
772+
bool getAllObjects(SelectionSet& objects) const override;
773+
774+
protected:
775+
Properties getDBProperties(
776+
odb::dbScanPartition* scan_partition) const override;
777+
};
778+
760779
class DbBoxDescriptor : public BaseDbDescriptor<odb::dbBox>
761780
{
762781
public:

src/gui/src/mainWindow.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -563,6 +563,8 @@ void MainWindow::init(sta::dbSta* sta, const std::string& help_path)
563563
gui->registerDescriptor<odb::dbMarker*>(new DbMarkerDescriptor(db_));
564564
gui->registerDescriptor<odb::dbScanInst*>(new DbScanInstDescriptor(db_));
565565
gui->registerDescriptor<odb::dbScanList*>(new DbScanListDescriptor(db_));
566+
gui->registerDescriptor<odb::dbScanPartition*>(
567+
new DbScanPartitionDescriptor(db_));
566568
gui->registerDescriptor<odb::dbBox*>(new DbBoxDescriptor(db_));
567569
gui->registerDescriptor<DbBoxDescriptor::BoxWithTransform>(
568570
new DbBoxDescriptor(db_));

0 commit comments

Comments
 (0)