#ifndef LINKTYPEDIALOG_H #define LINKTYPEDIALOG_H #include "core/Cutter.h" #include namespace Ui { class LinkTypeDialog; } class LinkTypeDialog : public QDialog { Q_OBJECT public: explicit LinkTypeDialog(QWidget *parent = nullptr); ~LinkTypeDialog(); /** * @brief Sets the default type which will be displayed in the combo box * @param type Default type to be used as default type */ void setDefaultType(const QString &type); /** * @brief Sets the value of the default address which will be displayed * If the given address is linked to a type, then it also sets the default * type to the currently linked type * @param address The address to be used as default address */ void setDefaultAddress(QString address); private slots: /** * @brief Overrides the done() method of QDialog * On clicking the Ok button, it links a valid address to a type. * If "(No Type)" is selected as type, it removes the link. * In case of an invalid address, it displays error message * @param r The value which will be returned by exec() */ void done(int r) override; /** * @brief Executed whenever the text inside exprLineEdit changes * If expression evaluates to valid address, it is displayed in addressLineEdit * Otherwise "Invalid Address" is shown in addressLineEdit * @param text The current value of exprLineEdit */ void on_exprLineEdit_textChanged(const QString &text); private: Ui::LinkTypeDialog *ui; /** * @brief Used for finding the type which is linked to the given address * @param address * @return The type linked to "address" if it exists, or empty string otherwise */ QString findLinkedType(RVA address); }; #endif // LINKTYPEDIALOG_H