| 15 | namespace dialogs { |
| 16 | |
| 17 | OptionsDialog::OptionsDialog(std::shared_ptr<openmittsu::options::OptionMaster> const& optionMaster, QWidget* parent) : QDialog(parent), m_ui(std::make_unique<Ui::OptionsDialog>()), m_optionMaster(optionMaster) { |
| 18 | m_ui->setupUi(this); |
| 19 | |
| 20 | int nWidth = 300; |
| 21 | int nHeight = 400; |
| 22 | if (parent != nullptr) { |
| 23 | setGeometry(parent->x() + parent->width() / 2 - nWidth / 2, parent->y() + parent->height() / 2 - nHeight / 2, nWidth, nHeight); |
| 24 | } else { |
| 25 | resize(nWidth, nHeight); |
| 26 | } |
| 27 | |
| 28 | // Generate UI |
| 29 | |
| 30 | QList<openmittsu::options::OptionGroups> const groups = m_optionMaster->m_groupToOptionsMap.uniqueKeys(); |
| 31 | |
| 32 | // Groups |
| 33 | for (int i = 0, sizeKeys = groups.size(); i < sizeKeys; ++i) { |
| 34 | QList<openmittsu::options::Options> const values = optionMaster->m_groupToOptionsMap.values(groups.at(i)); |
| 35 | if (!optionMaster->m_groupToNameMap.contains(groups.at(i))) { |
| 36 | continue; |
| 37 | } |
| 38 | |
| 39 | QString const groupName = optionMaster->m_groupToNameMap.value(groups.at(i)); |
| 40 | if (groupName.isEmpty()) { |
| 41 | continue; |
| 42 | } |
| 43 | LOGGER_DEBUG("Group: {}", groupName.toStdString()); |
| 44 | |
| 45 | int const sizeValues = values.size(); |
| 46 | if (sizeValues < 1) { |
| 47 | continue; |
| 48 | } |
| 49 | |
| 50 | QGroupBox* gbox = new QGroupBox(); |
| 51 | gbox->setTitle(groupName); |
| 52 | QVBoxLayout* layout = new QVBoxLayout(); |
| 53 | |
| 54 | |
| 55 | for (int j = 0; j < sizeValues; ++j) { |
| 56 | openmittsu::options::Options const option = values.at(j); |
| 57 | openmittsu::options::OptionContainer const optionData = optionMaster->m_optionToOptionContainerMap.value(option); |
| 58 | LOGGER_DEBUG("Option: {}", optionData.name.toStdString()); |
| 59 | |
| 60 | if (optionData.type == openmittsu::options::OptionTypes::TYPE_BOOL) { |
| 61 | QCheckBox* cbox = new QCheckBox(); |
| 62 | cbox->setChecked(optionMaster->getOptionAsBool(option)); |
| 63 | cbox->setText(optionData.description); |
| 64 | |
| 65 | OptionWidget ow; |
| 66 | ow.type = optionData.type; |
| 67 | ow.cboxPtr = cbox; |
| 68 | |
| 69 | optionToWidgetMap.insert(option, ow); |
| 70 | layout->addWidget(cbox); |
| 71 | } else if (optionData.type == openmittsu::options::OptionTypes::TYPE_FILEPATH) { |
| 72 | QLineEdit* edt = new QLineEdit(); |
| 73 | edt->setText(optionMaster->getOptionAsQString(option)); |
| 74 | edt->setToolTip(optionData.description); |