7 const char* BooleanFunctionEdit::STATE_EMPTY =
"Empty";
8 const char* BooleanFunctionEdit::STATE_VALID =
"Valid";
9 const char* BooleanFunctionEdit::STATE_INVALID =
"Invalid";
12 :
QLineEdit(parent), mState(STATE_VALID), mLegalVariables(legalVar)
22 if (s == mState)
return;
33 mLegalVariables = legalVar;
37 void BooleanFunctionEdit::handleEditingFinished()
45 QString nextState = STATE_VALID;
49 nextState = STATE_INVALID;
52 BooleanFunction bf = bfres.get();
53 std::set<std::string> var_names = bf.get_variable_names();
54 std::set<std::string> leg = mLegalVariables;
55 for(std::string vname : var_names)
57 if (mLegalVariables.find(vname) == mLegalVariables.end())
59 nextState = STATE_INVALID;
64 if (mState != nextState)
80 std::set<std::string> legVars;
82 legVars.insert(pi->getName().toStdString());
85 legVars.insert(pi->getName().toStdString());
90 legVars.insert(mWizard->statePage->mStateIdentifier->
text().toStdString());
91 legVars.insert(mWizard->statePage->mNegStateIdentifier->
text().toStdString());
94 if (!mEditFunctions.isEmpty())
98 mEditFunctions.clear();
101 std::unordered_map<std::string, BooleanFunction> boolFunctions;
111 legVars.insert(pin->getName().toStdString());
117 mLayout->
addWidget(label, boolFuncCnt, 0);
118 mLayout->
addWidget(lineEdit, boolFuncCnt, 1);
120 if(
auto bf = boolFunctions.find(pin->getName().toStdString()); bf != boolFunctions.end())
126 mEditFunctions.append(lineEdit);
127 mOutputPins.
append(pin->getName());
130 legVars.insert(pin->getName().toStdString());
136 mWizard->mEditMode =
true;
144 void BoolWizardPage::handleStateChanged(
const QString& stat)
151 void BoolWizardPage::handleTextChanged(
const QString& txt)
159 if(mWizard->mEditMode)
161 mWizard->mWasEdited =
true;
171 if(!lineEdit->isValid())
176 if(
isFinalPage() && !mWizard->mWasEdited)
return false;
177 mWizard->mEditMode =
false;
182 std::unordered_map<std::string, BooleanFunction> retval;
183 for(
int i = 0; i<mEditFunctions.length(); i++)
189 retval.insert({mOutputPins[i].toStdString(), bfres.get()});
BoolWizardPage(QWidget *parent=nullptr)
std::unordered_map< std::string, BooleanFunction > getBoolFunctions()
void setData(GateType *gate)
void initializePage() override
bool isComplete() const override
void setState(const QString &s)
void setLegalVariables(std::set< std::string > &legalVar)
void legalVariablesChanged(std::set< std::string > legalVar)
BooleanFunctionEdit(std::set< std::string > &legalVar, QWidget *parent=nullptr)
void stateChanged(QString s)
static Result< BooleanFunction > from_string(const std::string &expression)
bool isDefinedByLut(const PinItem *pin) const
const std::unordered_map< std::string, BooleanFunction > & get_boolean_functions() const
QList< GateTypeProperty > getProperties() const
QList< PinItem * > getInputPins()
QList< PinItem * > getOutputPins()
QList< PinItem * > getInternalPins()
void textChanged(const QString &text)
void append(const T &value)
QMetaObject::Connection connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type)
QString fromStdString(const std::string &str)
virtual void polish(QWidget *widget)
virtual void unpolish(QWidget *widget)
bool isFinalPage() const const
void setSubTitle(const QString &subTitle)
void setTitle(const QString &title)
QWizard * wizard() const const