Skip to content

Commit c806614

Browse files
authored
Merge pull request #7923 from AcKoucher/gui-scan-chain-descriptor
gui: add descriptor for dbScanChain
2 parents 13b29fb + 6dec58c commit c806614

File tree

3 files changed

+101
-0
lines changed

3 files changed

+101
-0
lines changed

src/gui/src/dbDescriptors.cpp

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
48204902
DbBoxDescriptor::DbBoxDescriptor(odb::dbDatabase* db)
48214903
: BaseDbDescriptor<odb::dbBox>(db)
48224904
{

src/gui/src/dbDescriptors.h

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -776,6 +776,24 @@ class DbScanPartitionDescriptor : public BaseDbDescriptor<odb::dbScanPartition>
776776
odb::dbScanPartition* scan_partition) const override;
777777
};
778778

779+
class DbScanChainDescriptor : public BaseDbDescriptor<odb::dbScanChain>
780+
{
781+
public:
782+
DbScanChainDescriptor(odb::dbDatabase* db);
783+
784+
std::string getName(std::any object) const override;
785+
std::string getTypeName() const override;
786+
787+
bool getBBox(std::any object, odb::Rect& bbox) const override;
788+
789+
void highlight(std::any object, Painter& painter) const override;
790+
791+
bool getAllObjects(SelectionSet& objects) const override;
792+
793+
protected:
794+
Properties getDBProperties(odb::dbScanChain* scan_chain) const override;
795+
};
796+
779797
class DbBoxDescriptor : public BaseDbDescriptor<odb::dbBox>
780798
{
781799
public:

src/gui/src/mainWindow.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -565,6 +565,7 @@ void MainWindow::init(sta::dbSta* sta, const std::string& help_path)
565565
gui->registerDescriptor<odb::dbScanList*>(new DbScanListDescriptor(db_));
566566
gui->registerDescriptor<odb::dbScanPartition*>(
567567
new DbScanPartitionDescriptor(db_));
568+
gui->registerDescriptor<odb::dbScanChain*>(new DbScanChainDescriptor(db_));
568569
gui->registerDescriptor<odb::dbBox*>(new DbBoxDescriptor(db_));
569570
gui->registerDescriptor<DbBoxDescriptor::BoxWithTransform>(
570571
new DbBoxDescriptor(db_));

0 commit comments

Comments
 (0)