#include "toonzqt/validatedchoicedialog.h" // Qt includes #include #include #include //************************************************************************ // ValidatedChoiceDialog implementation //************************************************************************ DVGui::ValidatedChoiceDialog::ValidatedChoiceDialog(QWidget *parent, Options opts) : Dialog(parent, true, false) { setModal(true); m_buttonGroup = new QButtonGroup(this); m_buttonGroup->setExclusive(true); bool ret = true; QPushButton *okBtn = new QPushButton(QString(tr("Apply")), this); ret = ret && connect(okBtn, SIGNAL(clicked()), SLOT(accept())); addButtonBarWidget(okBtn); QPushButton *okToAllBtn = new QPushButton(QString(tr("Apply to All")), this); ret = ret && connect(okToAllBtn, SIGNAL(clicked()), SLOT(onApplyToAll())); addButtonBarWidget(okToAllBtn); QPushButton *cancelBtn = new QPushButton(QString(tr("Cancel")), this); ret = ret && connect(cancelBtn, SIGNAL(clicked()), SLOT(reject())); addButtonBarWidget(cancelBtn); assert(ret); reset(); // Start layout beginVLayout(); m_label = new QLabel(this); addWidget(m_label); // enbVLayout() must be invoked by derived classes } //------------------------------------------------------------------------ void DVGui::ValidatedChoiceDialog::reset() { m_appliedToAllRes = NO_REQUIRED_RESOLUTION; m_appliedToAll = false; } //------------------------------------------------------------------------ QString validate(void *obj); int DVGui::ValidatedChoiceDialog::execute(void *obj) { struct Resol { int m_res; bool m_all; Resol(int res, bool all) : m_res(res), m_all(all) {} }; Resol curResolution(NO_REQUIRED_RESOLUTION, false), newResolution(m_appliedToAll ? m_appliedToAllRes : NO_REQUIRED_RESOLUTION, m_appliedToAll); bool initialize = true; // Loop until a resolution gets accepted do { QString err = acceptResolution(obj, curResolution.m_res, curResolution.m_all); if (err.isEmpty()) break; if (newResolution.m_res == NO_REQUIRED_RESOLUTION) { // No new resolution selected - prompt for user interaction m_label->setText(err); m_applyToAll = false; if (initialize) initializeUserInteraction(obj), initialize = false; if (exec() == QDialog::Rejected) { curResolution.m_res = CANCEL; break; } newResolution = Resol(m_buttonGroup->checkedId(), m_applyToAll); assert(newResolution.m_res >= DEFAULT_RESOLUTIONS_COUNT); } // Substitute resolution and retry curResolution = newResolution, newResolution = Resol(NO_REQUIRED_RESOLUTION, false); } while (true); return curResolution.m_res; } //------------------------------------------------------------------------ void DVGui::ValidatedChoiceDialog::onApplyToAll() { m_appliedToAllRes = m_buttonGroup->checkedId(); m_applyToAll = m_appliedToAll = true; assert(m_appliedToAllRes >= DEFAULT_RESOLUTIONS_COUNT); accept(); }