133 lines
4.7 KiB
C
133 lines
4.7 KiB
C
|
|
||
|
|
||
|
#ifndef VALIDATEDCHOICEDIALOG_H
|
||
|
#define VALIDATEDCHOICEDIALOG_H
|
||
|
|
||
|
// TnzCore includes
|
||
|
#include "tcommon.h"
|
||
|
|
||
|
// TnzQt includes
|
||
|
#include "toonzqt/dvdialog.h"
|
||
|
|
||
|
#undef DVAPI
|
||
|
#undef DVVAR
|
||
|
#ifdef TOONZQT_EXPORTS
|
||
|
#define DVAPI DV_EXPORT_API
|
||
|
#define DVVAR DV_EXPORT_VAR
|
||
|
#else
|
||
|
#define DVAPI DV_IMPORT_API
|
||
|
#define DVVAR DV_IMPORT_VAR
|
||
|
#endif
|
||
|
|
||
|
//====================================================
|
||
|
|
||
|
// Forward declarations
|
||
|
|
||
|
class QButtonGroup;
|
||
|
|
||
|
//====================================================
|
||
|
|
||
|
//************************************************************************
|
||
|
// ValidatedChoiceDialog declaration
|
||
|
//************************************************************************
|
||
|
|
||
|
namespace DVGui
|
||
|
{
|
||
|
|
||
|
/*!
|
||
|
\brief Base class for validated multi-choice user dialogs.
|
||
|
|
||
|
\warning For correct usage, observe the guidelines described in the
|
||
|
ValidatedChoiceDialog() constructor.
|
||
|
*/
|
||
|
|
||
|
class DVAPI ValidatedChoiceDialog : public Dialog
|
||
|
{
|
||
|
Q_OBJECT
|
||
|
|
||
|
public:
|
||
|
enum Options //! Construction options
|
||
|
{
|
||
|
NO_OPTIONS = 0x0, //!< No special options.
|
||
|
APPLY_TO_ALL = 0x1 //!< Has the "Apply to All" button. An <I>applied to all</I>
|
||
|
//! resolution persists as the default without-prompt resolution
|
||
|
//! until the next call to reset().
|
||
|
};
|
||
|
|
||
|
enum DefaultResolution //! Basic resolutions supported by the dialog.
|
||
|
{
|
||
|
NO_REQUIRED_RESOLUTION = 0, //!< An object supplied for validation turns out to be valid,
|
||
|
//! no need for any resolution.
|
||
|
CANCEL = 1, //!< Resolution selection was canceled. Stop processing.
|
||
|
|
||
|
DEFAULT_RESOLUTIONS_COUNT
|
||
|
};
|
||
|
|
||
|
public:
|
||
|
/*! \warning Due to compatibility with DVGui::Dialog's interface, this class reserves
|
||
|
invocation of \p Dialog::beginVLayout() during class construction -
|
||
|
however, <B>\p Dialog::endVLayout() invocation is responsibility of
|
||
|
derived classes</B> after resolution choices have been manually added
|
||
|
to the layout.
|
||
|
|
||
|
\warning Users are required to respect the default resolution ids when adding
|
||
|
buttons into \p m_buttonGroup. See the \p DefaultResolution enum for a
|
||
|
list of all default resolutions. */
|
||
|
|
||
|
ValidatedChoiceDialog(QWidget *parent,
|
||
|
Options opts = NO_OPTIONS); //!< Constructs the dialog with no default resolutions. \param parent Parent top-level widget. \param Opts Construction options.
|
||
|
|
||
|
/*! \param obj The object to resolve.
|
||
|
\return The accepted resolution. */
|
||
|
|
||
|
int execute(void *obj); //!< Prompts the dialog asking for user input, until a
|
||
|
//! valid resolution for the specified object is selected or
|
||
|
//! the action is canceled.
|
||
|
virtual void reset(); //!< Clears accepted resolutions - should be used together
|
||
|
//! with option \p APPLY_TO_ALL.
|
||
|
protected:
|
||
|
QButtonGroup *m_buttonGroup; //!< Group of abstract buttons representing all
|
||
|
//! available resolutions.
|
||
|
protected:
|
||
|
/*! \details Resolution \p NO_REQUIRED_RESOLUTION is always tested before other
|
||
|
proposed resolutions.
|
||
|
|
||
|
\return An error message upon failure. */
|
||
|
|
||
|
virtual QString acceptResolution(
|
||
|
void *obj, //!< The type-erased object to be resolved. May be modified.
|
||
|
int resolution, //!< The <I>button id</I> associated to the selected resolution.
|
||
|
bool applyToAll //!< Whether user selected the resolution for all successive prompts.
|
||
|
) = 0; //!< Attempts enforcement of the selected resolution.
|
||
|
|
||
|
/*! \details This function can be used to initialize the widget as soon as
|
||
|
user interaction is required. Use \p showEvent() in case the
|
||
|
initialization is needed at \a every interaction time. */
|
||
|
|
||
|
virtual void initializeUserInteraction(const void *obj) {} //!< Invoked at max \a once per \p execute(), immediately
|
||
|
//! before the dialog is shown.
|
||
|
bool appliedToAll() const
|
||
|
{
|
||
|
return m_appliedToAll;
|
||
|
} //!< Returns whether the "Apply To All" button has been hit.
|
||
|
int appliedToAllResolution() const
|
||
|
{
|
||
|
return m_appliedToAllRes;
|
||
|
} //!< Returns the resolution associated to the "Apply To All"
|
||
|
//! button.
|
||
|
private:
|
||
|
QLabel *m_label; //!< Label showing a description of the validation problem.
|
||
|
|
||
|
int m_appliedToAllRes; //!< Resolution applied in the \p APPLY_TO_ALL case.
|
||
|
bool m_appliedToAll, //!< Whether the \p APPLY_TO_ALL option has previously been selected.
|
||
|
m_applyToAll; //!< Whether the \p APPLY_TO_ALL option has been selected in
|
||
|
//! \a current user interaction.
|
||
|
private slots:
|
||
|
|
||
|
void onApplyToAll();
|
||
|
};
|
||
|
|
||
|
} // namespace DVGui
|
||
|
|
||
|
#endif // VALIDATEDCHOICEDIALOG_H
|