HAL  v4.5.0-83-g30c8f0afc
The Hardware Analyzer - a comprehensive reverse engineering and manipulation framework for gate-level netlists.
simulation_setting_dialog.cpp
Go to the documentation of this file.
2 #include <QGridLayout>
3 #include <QFormLayout>
4 #include <QDebug>
5 #include <QHeaderView>
6 #include <QPainter>
7 #include <QLabel>
8 
9 namespace hal {
10 
12  : QDialog(parent), mSettings(settings)
13  {
14  QGridLayout* layout = new QGridLayout(this);
15  mTabWidget = new QTabWidget(this);
16  mTabWidget->addTab(new SimulationSettingGlobalTab(settings,this), "Global settings");
17  mTabWidget->addTab(new SimulationSettingPropertiesTab(settings,this), "Engine properties");
18  mTabWidget->addTab(new SimulationSettingColorTab(settings,this), "Color settings");
19  mTabWidget->setMinimumWidth(640);
20  layout->addWidget(mTabWidget,0,0,1,2);
22  connect(mButtonBox, &QDialogButtonBox::accepted, this, &SimulationSettingDialog::accept);
24  layout->addWidget(mButtonBox,1,1);
25  }
26 
27  void SimulationSettingDialog::accept()
28  {
29  const SimulationSettingGlobalTab* globTab = static_cast<const SimulationSettingGlobalTab*>(mTabWidget->widget(0));
30  mSettings->setMaxSizeLoadable(globTab->maxSizeLoadable());
31  mSettings->setMaxSizeEditor(globTab->maxSizeEditor());
32  mSettings->setBaseDirectory(globTab->isCustomBaseDirectory() ? globTab->baseDirectory() : QString(""));
33 
34  const SimulationSettingPropertiesTab* propTab = static_cast<const SimulationSettingPropertiesTab*>(mTabWidget->widget(1));
35  mSettings->setEngineProperties(propTab->engineProperties());
36 
37  const SimulationSettingColorTab* colorTab = static_cast<const SimulationSettingColorTab*>(mTabWidget->widget(2));
38  for (int irow = 0; irow < SimulationSettings::MaxColorSetting; irow++)
39  {
41  mSettings->setColor(cs,colorTab->colorSetting(cs));
42  }
43  mSettings->sync();
44 
46  }
47 
48  //-----------------------------------
50  : QWidget(parent)
51  {
52  QFormLayout* layout = new QFormLayout(this);
53  const char* labl[SimulationSettings::MaxColorSetting] = {"regular waveform", "selected waveform", "waveform value undefined", "value X", "value 0", "value 1"};
54  for (int irow = 0; irow < SimulationSettings::MaxColorSetting; irow++)
55  {
56  switch (irow)
57  {
58  case 0:
59  layout->addRow(new QLabel("Color for waveform graph:", this));
60  break;
61  case 3:
62  QLabel* lab = new QLabel("Background color for values", this);
63  lab->setMinimumHeight(50);
65  layout->addRow(lab);
66  break;
67  }
68 
69  mActivateColorDialog[irow] = new ColorSelection(settings->color((SimulationSettings::ColorSetting)irow), QString(labl[irow]), irow>=3, this);
70  layout->addRow(QString(labl[irow]),mActivateColorDialog[irow]);
71  }
72  }
73 
75  {
76  return mActivateColorDialog[inx]->colorName();
77  }
78 
79  //-----------------------------------
81  : QWidget(parent)
82  {
83  QFormLayout* layout = new QFormLayout(this);
84  mMaxSizeLoadable = new QSpinBox(this);
85  mMaxSizeLoadable->setMaximum(5000000);
86  mMaxSizeLoadable->setMinimum(50);
87  mMaxSizeLoadable->setValue(settings->maxSizeLoadable());
88  layout->addRow("Load waveform to memory if number transitions <", mMaxSizeLoadable);
89  mMaxSizeEditor = new QSpinBox(this);
90  mMaxSizeEditor->setMaximum(5000);
91  mMaxSizeEditor->setMinimum(10);
92  mMaxSizeEditor->setValue(settings->maxSizeLoadable());
93  layout->addRow("Maximum number of values to load into editor ", mMaxSizeEditor);
94  layout->addItem(new QSpacerItem(0,100));
95  mCustomBaseDicectory = new QCheckBox(this);
96  connect(mCustomBaseDicectory,&QCheckBox::toggled,this,&SimulationSettingGlobalTab::customBaseDirectoryToggled);
97  layout->addRow("Custom base directory instead of project dir:", mCustomBaseDicectory);
98  mEditBaseDirectory = new QLineEdit(this);
99  mEditBaseDirectory->setText(settings->baseDirectory());
100  layout->addRow("Base directory:", mEditBaseDirectory);
101  }
102 
103  void SimulationSettingGlobalTab::customBaseDirectoryToggled(bool on)
104  {
105  mEditBaseDirectory->setEnabled(on);
106  }
107 
108  //-----------------------------------
110  : QTableWidget(parent)
111  {
112  QMap<QString,QString> engProp = settings->engineProperties();
113  setColumnCount(2);
114  setColumnWidth(0,250);
115  setColumnWidth(1,350);
116  setRowCount(engProp.size()+3);
117  setHorizontalHeaderLabels(QStringList() << "Property" << "Value");
118  int irow = 0;
119  for (auto it = engProp.constBegin(); it != engProp.constEnd(); ++it)
120  {
121  QTableWidgetItem wi(it.key());
122  setItem(irow,0,new QTableWidgetItem(it.key()));
123  setItem(irow,1,new QTableWidgetItem(it.value()));
124  ++irow;
125  }
127  connect(this,&QTableWidget::cellChanged,this,&SimulationSettingPropertiesTab::handleCellChanged);
128  }
129 
130  void SimulationSettingPropertiesTab::handleCellChanged(int irow, int icolumn)
131  {
132  if ((icolumn == 1 && irow >= rowCount()-2) ||
133  (icolumn == 0 && irow >= rowCount()-1))
134  setRowCount(rowCount()+1);
135  }
136 
138  {
139  QMap<QString,QString> retval;
140  for (int irow=0; irow < rowCount(); ++irow)
141  {
142  const QTableWidgetItem* wi = item(irow,0);
143  if (!wi) continue;
144  QString key = wi->text().trimmed();
145  if (key.isEmpty()) continue;
146  wi = item(irow,1);
147  QString value = wi ? wi->text().trimmed() : QString();
148  retval[key] = value;
149  }
150  return retval;
151  }
152 }
QString colorName() const
SimulationSettingColorTab(SimulationSettings *settings, QWidget *parent=nullptr)
SimulationSettingDialog(SimulationSettings *settings, QWidget *parent=nullptr)
SimulationSettingGlobalTab(SimulationSettings *settings, QWidget *parent=nullptr)
QMap< QString, QString > engineProperties() const
SimulationSettingPropertiesTab(SimulationSettings *settings, QWidget *parent=nullptr)
QMap< QString, QString > engineProperties() const
void setEngineProperties(const QMap< QString, QString > &engProp)
QString color(ColorSetting cs) const
void setBaseDirectory(const QString &dir)
void setColor(ColorSetting cs, const QString &colName)
Definition: defines.h:45
void toggled(bool checked)
virtual void accept()
virtual void reject()
void setStretchLastSection(bool stretch)
void setAlignment(Qt::Alignment)
virtual void addItem(QLayoutItem *item)=0
void addWidget(QWidget *w)
void setText(const QString &)
QMap::const_iterator constBegin() const const
QMap::const_iterator constEnd() const const
int size() const const
QMetaObject::Connection connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type)
void sync()
void setMaximum(int max)
void setMinimum(int min)
void setValue(int val)
bool isEmpty() const const
QString trimmed() const const
AlignLeft
QHeaderView * horizontalHeader() const const
void setColumnWidth(int column, int width)
void cellChanged(int row, int column)
QTableWidgetItem * item(int row, int column) const const
void setColumnCount(int columns)
void setHorizontalHeaderLabels(const QStringList &labels)
void setItem(int row, int column, QTableWidgetItem *item)
void setRowCount(int rows)
QString text() const const
int addTab(QWidget *page, const QString &label)
QWidget * widget(int index) const const
void setEnabled(bool)
QLayout * layout() const const
void setMinimumHeight(int minh)
void setMinimumWidth(int minw)