Skip to content

Commit 5b5feea

Browse files
committed
gui: add cell edge spacing descriptor
Signed-off-by: Peter Gadfort <[email protected]>
1 parent 180c8fa commit 5b5feea

File tree

3 files changed

+96
-0
lines changed

3 files changed

+96
-0
lines changed

src/gui/src/dbDescriptors.cpp

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5142,6 +5142,22 @@ Descriptor::Properties DbMasterEdgeTypeDescriptor::getDBProperties(
51425142
{
51435143
Properties props;
51445144

5145+
auto* gui = Gui::get();
5146+
5147+
SelectionSet rules;
5148+
for (auto* tech : db_->getTechs()) {
5149+
for (auto* rule : tech->getCellEdgeSpacingTable()) {
5150+
if (rule->getFirstEdgeType() == edge->getEdgeType()) {
5151+
rules.insert(gui->makeSelected(rule));
5152+
} else if (rule->getSecondEdgeType() == edge->getEdgeType()) {
5153+
rules.insert(gui->makeSelected(rule));
5154+
}
5155+
}
5156+
}
5157+
if (!rules.empty()) {
5158+
props.push_back({"Rules", rules});
5159+
}
5160+
51455161
if (edge->getCellRow() != -1) {
51465162
props.push_back({"Cell row", edge->getCellRow()});
51475163
}
@@ -5180,4 +5196,62 @@ Descriptor::Properties DbMasterEdgeTypeDescriptor::getDBProperties(
51805196
return props;
51815197
}
51825198

5199+
//////////////////////////////////////////////////
5200+
5201+
DbCellEdgeSpacingDescriptor::DbCellEdgeSpacingDescriptor(odb::dbDatabase* db)
5202+
: BaseDbDescriptor<odb::dbCellEdgeSpacing>(db)
5203+
{
5204+
}
5205+
5206+
std::string DbCellEdgeSpacingDescriptor::getName(const std::any& object) const
5207+
{
5208+
auto* obj = getObject(object);
5209+
return obj->getFirstEdgeType() + " - " + obj->getSecondEdgeType();
5210+
}
5211+
5212+
std::string DbCellEdgeSpacingDescriptor::getTypeName() const
5213+
{
5214+
return "CellEdgeSpacingRule";
5215+
}
5216+
5217+
bool DbCellEdgeSpacingDescriptor::getBBox(const std::any& object,
5218+
odb::Rect& bbox) const
5219+
{
5220+
return false;
5221+
}
5222+
5223+
void DbCellEdgeSpacingDescriptor::highlight(const std::any& object,
5224+
Painter& painter) const
5225+
{
5226+
}
5227+
5228+
void DbCellEdgeSpacingDescriptor::visitAllObjects(
5229+
const std::function<void(const Selected&)>& func) const
5230+
{
5231+
for (auto* tech : db_->getTechs()) {
5232+
for (auto* rule : tech->getCellEdgeSpacingTable()) {
5233+
func({rule, this});
5234+
}
5235+
}
5236+
}
5237+
5238+
Descriptor::Properties DbCellEdgeSpacingDescriptor::getDBProperties(
5239+
odb::dbCellEdgeSpacing* rule) const
5240+
{
5241+
Properties props;
5242+
5243+
props.push_back({"First edge", rule->getFirstEdgeType()});
5244+
props.push_back({"Second edge", rule->getSecondEdgeType()});
5245+
5246+
props.push_back({"Spacing", Property::convert_dbu(rule->getSpacing(), true)});
5247+
props.push_back({"Except abutted", rule->isExceptAbutted()});
5248+
props.push_back(
5249+
{"Except non filler in between", rule->isExceptNonFillerInBetween()});
5250+
props.push_back({"Optional", rule->isOptional()});
5251+
props.push_back({"Soft", rule->isSoft()});
5252+
props.push_back({"Exact", rule->isExact()});
5253+
5254+
return props;
5255+
}
5256+
51835257
} // namespace gui

src/gui/src/dbDescriptors.h

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -888,4 +888,24 @@ class DbMasterEdgeTypeDescriptor
888888
Properties getDBProperties(odb::dbMasterEdgeType* edge) const override;
889889
};
890890

891+
class DbCellEdgeSpacingDescriptor
892+
: public BaseDbDescriptor<odb::dbCellEdgeSpacing>
893+
{
894+
public:
895+
DbCellEdgeSpacingDescriptor(odb::dbDatabase* db);
896+
897+
std::string getName(const std::any& object) const override;
898+
std::string getTypeName() const override;
899+
900+
bool getBBox(const std::any& object, odb::Rect& bbox) const override;
901+
902+
void highlight(const std::any& object, Painter& painter) const override;
903+
904+
void visitAllObjects(
905+
const std::function<void(const Selected&)>& func) const override;
906+
907+
protected:
908+
Properties getDBProperties(odb::dbCellEdgeSpacing* rule) const override;
909+
};
910+
891911
}; // namespace gui

src/gui/src/mainWindow.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -617,6 +617,8 @@ void MainWindow::init(sta::dbSta* sta, const std::string& help_path)
617617
new DbBoxDescriptor(db_));
618618
gui->registerDescriptor<odb::dbMasterEdgeType*>(
619619
new DbMasterEdgeTypeDescriptor(db_));
620+
gui->registerDescriptor<odb::dbCellEdgeSpacing*>(
621+
new DbCellEdgeSpacingDescriptor(db_));
620622

621623
gui->registerDescriptor<sta::Corner*>(new CornerDescriptor(sta));
622624
gui->registerDescriptor<sta::LibertyLibrary*>(

0 commit comments

Comments
 (0)