HAL
ram_port_wizardpage.cpp
Go to the documentation of this file.
4 
5 namespace hal
6 {
8  {
9  setTitle("RAM Port");
10  setSubTitle("Enter parameters for RAM Port component");
11  mLayout = new QGridLayout(this);
12 
13  setLayout(mLayout);
14  }
15 
17  mWizard = static_cast<GateLibraryWizard*>(wizard());
18  int ramPortCnt = 0;
19  QList<PinItem*> pinGroups = mWizard->getPingroups();
20  std::vector<GateTypeComponent*> ram_ports;
22  {
23  ram_ports = mGate->get_components([](const GateTypeComponent* c) {return RAMPortComponent::is_class_of(c);});
24  }
25 
26  //create empty lines for ram_port for each data/address pair
27  //assumption at this point: #data fields = #address fields
28  for (int i=0; i<pinGroups.length(); i++) {
29  if(pinGroups[i]->getItemType() == PinItem::TreeItemType::GroupCreator) continue;
30  PinType type = pinGroups[i]->getPinType();
31  if(type == PinType::data)
32  {
33  ramPortCnt++;
34  mLayout->addWidget(new GateLibraryLabel(false, QString("RAM Port %1").arg(ramPortCnt), this), 6*(ramPortCnt-1), 0);
35 
36  RAMPort rp;
37  rp.dataGroup = new QLineEdit(this);
38  rp.addressGroup = new QLineEdit(this);
39  rp.clockFunction = new QLineEdit(this);
40  rp.enableFunciton = new QLineEdit(this);
41  rp.isWritePort = new QCheckBox(this);
42 
43  mLabDataGroup = new QLabel("Name of the data pingroup: ");
44  mLabAddressGroup = new QLabel("Name of the address pingroup: ");
45  mLabClockFunction = new QLabel("Clock boolean function: ");
46  mLabEnableFunciton = new QLabel("Enable boolean function: ");
47  mLabIsWritePort = new QLabel("Is a write port: ");
48 
49  mLayout->addWidget(mLabDataGroup, 6*(ramPortCnt-1)+1, 0);
50  mLayout->addWidget(rp.dataGroup, 6*(ramPortCnt-1)+1, 1);
51  mLayout->addWidget(mLabAddressGroup, 6*(ramPortCnt-1)+2, 0);
52  mLayout->addWidget(rp.addressGroup, 6*(ramPortCnt-1)+2, 1);
53  mLayout->addWidget(mLabClockFunction, 6*(ramPortCnt-1)+3, 0);
54  mLayout->addWidget(rp.clockFunction, 6*(ramPortCnt-1)+3, 1);
55  mLayout->addWidget(mLabEnableFunciton, 6*(ramPortCnt-1)+4, 0);
56  mLayout->addWidget(rp.enableFunciton, 6*(ramPortCnt-1)+4, 1);
57  mLayout->addWidget(mLabIsWritePort, 6*(ramPortCnt-1)+5, 0);
58  mLayout->addWidget(rp.isWritePort, 6*(ramPortCnt-1)+5, 1);
59 
60  if(!ram_ports.empty() && ramPortCnt<=ram_ports.size()) {
61  auto ram_port = ram_ports[ramPortCnt-1]->convert_to<RAMPortComponent>();
62  rp.dataGroup->setText(QString::fromStdString(ram_port->get_data_group()));
63  rp.addressGroup->setText(QString::fromStdString(ram_port->get_address_group()));
64  rp.clockFunction->setText(QString::fromStdString(ram_port->get_clock_function().to_string()));
65  rp.enableFunciton->setText(QString::fromStdString(ram_port->get_enable_function().to_string()));
66  rp.isWritePort->setChecked(ram_port->is_write_port());
67  }
68  mRamPortEdits.append(rp);
69 
75  }
76  }
77 
78  mWizard->mEditMode = true;
79  setLayout(mLayout);
80 }
81 
83  mGate = gate;
84  }
85 
87  return mRamPortEdits;
88  }
89 
91  {
92  mWizard->mEditMode = false;
93  return true;
94  }
95 }
QList< PinItem * > getPingroups()
std::vector< GateTypeComponent * > get_components(const std::function< bool(const GateTypeComponent *)> &filter=nullptr) const
Definition: gate_type.cpp:19
bool has_component_of_type(const GateTypeComponent::ComponentType type) const
Definition: gate_type.cpp:54
static bool is_class_of(const GateTypeComponent *component)
RAMPortWizardPage(QWidget *parent=nullptr)
QList< RAMPort > getRamPorts()
bool isComplete() const override
void setData(GateType *gate)
PinType
Definition: pin_type.h:36
PinType type
void setChecked(bool)
void stateChanged(int state)
void addWidget(QWidget *widget, int row, int column, Qt::Alignment alignment)
void setText(const QString &)
void textChanged(const QString &text)
int length() const const
QMetaObject::Connection connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type)
QString fromStdString(const std::string &str)
void setLayout(QLayout *layout)
void completeChanged()
void setSubTitle(const QString &subTitle)
void setTitle(const QString &title)
QWizard * wizard() const const