119 lines
2.9 KiB
C++
119 lines
2.9 KiB
C++
|
|
||
|
|
||
|
#include "toonzqt/validatedchoicedialog.h"
|
||
|
|
||
|
// Qt includes
|
||
|
#include <QLabel>
|
||
|
#include <QPushButton>
|
||
|
#include <QButtonGroup>
|
||
|
|
||
|
//************************************************************************
|
||
|
// 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();
|
||
|
}
|