| 775 | } |
| 776 | |
| 777 | QWidget* ExtraOptionDelegate::createEditor(QWidget* parent, const QStyleOptionViewItem& option, const QModelIndex& index) const |
| 778 | { |
| 779 | if (index.data(Qt::UserRole).canConvert<SolverFlag>()) { |
| 780 | auto f = qvariant_cast<SolverFlag>(index.data(Qt::UserRole)); |
| 781 | switch (f.t) { |
| 782 | case SolverFlag::T_INT: |
| 783 | { |
| 784 | auto field = new QLineEdit(parent); |
| 785 | field->setAlignment(Qt::AlignRight); |
| 786 | field->setValidator(new LongLongValidator()); |
| 787 | return field; |
| 788 | } |
| 789 | case SolverFlag::T_INT_RANGE: |
| 790 | { |
| 791 | if (f.min_ll < std::numeric_limits<int>::min() || f.max_ll > std::numeric_limits<int>::max()) { |
| 792 | auto field = new QLineEdit(parent); |
| 793 | field->setAlignment(Qt::AlignRight); |
| 794 | field->setValidator(new LongLongValidator(f.min_ll, f.max_ll)); |
| 795 | return field; |
| 796 | } else { |
| 797 | auto field = new QSpinBox(parent); |
| 798 | field->setRange(static_cast<int>(f.min_ll), static_cast<int>(f.max_ll)); |
| 799 | return field; |
| 800 | } |
| 801 | } |
| 802 | case SolverFlag::T_FLOAT: |
| 803 | { |
| 804 | auto field = new QLineEdit(parent); |
| 805 | field->setAlignment(Qt::AlignRight); |
| 806 | field->setValidator(new QDoubleValidator()); |
| 807 | return field; |
| 808 | } |
| 809 | case SolverFlag::T_FLOAT_RANGE: |
| 810 | { |
| 811 | auto field = new QDoubleSpinBox(parent); |
| 812 | field->setDecimals(DBL_MAX_10_EXP + DBL_DIG); |
| 813 | field->setRange(f.min, f.max); |
| 814 | return field; |
| 815 | } |
| 816 | case SolverFlag::T_OPT: |
| 817 | { |
| 818 | auto field = new QComboBox(parent); |
| 819 | field->addItems(f.options); |
| 820 | return field; |
| 821 | } |
| 822 | case SolverFlag::T_SOLVER: |
| 823 | { |
| 824 | auto field = new QComboBox(parent); |
| 825 | for (auto* solver : MznDriver::get().solvers()) { |
| 826 | field->addItem(solver->name); |
| 827 | } |
| 828 | return field; |
| 829 | } |
| 830 | case SolverFlag::T_BOOL: |
| 831 | case SolverFlag::T_BOOL_ONOFF: |
| 832 | case SolverFlag::T_STRING: |
| 833 | return QStyledItemDelegate::createEditor(parent, option, index); |
| 834 | } |