|
Shinya Kitaoka |
810553 |
#pragma once
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#ifndef OVERWRITEPOPUP_H
|
|
Toshihiro Shimizu |
890ddd |
#define OVERWRITEPOPUP_H
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
// TnzQt includes
|
|
Toshihiro Shimizu |
890ddd |
#include "toonzqt/dvdialog.h"
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//===========================================================
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
// Forward declarations
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
class ToonzScene;
|
|
Toshihiro Shimizu |
890ddd |
class TFilePath;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
namespace DVGui {
|
|
Toshihiro Shimizu |
890ddd |
class CheckBox;
|
|
Toshihiro Shimizu |
890ddd |
class LineEdit;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
class QLabel;
|
|
Toshihiro Shimizu |
890ddd |
class QRadioButton;
|
|
Toshihiro Shimizu |
890ddd |
class QPushButton;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//===========================================================
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
/*!
|
|
Toshihiro Shimizu |
890ddd |
This dialog offers a standard 'overwrite file' resolution Dialog.
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
Sometimes, the system attempts to write to the file path of an
|
|
Toshihiro Shimizu |
890ddd |
already existing file. This dialog presents a standard interface
|
|
Toshihiro Shimizu |
890ddd |
to let users choose the conflict resolution manually.
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
There are 3 possible resolution choices:
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
\li \b Overwrite the existing file
|
|
Toshihiro Shimizu |
890ddd |
\li \b Keep the existing file (aborting the write operation)
|
|
Toshihiro Shimizu |
890ddd |
\li \b Rename the file to write adding a suffix
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
Additionally, the dialog could be \t CANCELED, either by closing it
|
|
Toshihiro Shimizu |
890ddd |
or pressing the "Cancel" button.
|
|
Toshihiro Shimizu |
890ddd |
*/
|
|
Shinya Kitaoka |
d1f6c4 |
class OverwriteDialog final : public DVGui::Dialog {
|
|
Shinya Kitaoka |
120a6e |
Q_OBJECT
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
public:
|
|
Shinya Kitaoka |
120a6e |
enum Resolution {
|
|
Shinya Kitaoka |
120a6e |
CANCELED = 0x0,
|
|
Shinya Kitaoka |
120a6e |
KEEP_OLD = 0x1,
|
|
Shinya Kitaoka |
120a6e |
OVERWRITE = 0x2,
|
|
Shinya Kitaoka |
120a6e |
RENAME = 0x4,
|
|
Shinya Kitaoka |
120a6e |
ALL_RESOLUTIONS = KEEP_OLD | OVERWRITE | RENAME
|
|
Shinya Kitaoka |
120a6e |
};
|
|
Shinya Kitaoka |
120a6e |
enum Flags { NO_FLAG = 0x0, APPLY_TO_ALL_FLAG = 0x1 };
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
public:
|
|
Shinya Kitaoka |
120a6e |
struct ExistsFunc {
|
|
Shinya Kitaoka |
120a6e |
virtual QString conflictString(const TFilePath &fp) const = 0;
|
|
Shinya Kitaoka |
120a6e |
virtual bool operator()(const TFilePath &fp) const = 0;
|
|
Shinya Kitaoka |
120a6e |
};
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
d1f6c4 |
struct DecodeFileExistsFunc final : public ExistsFunc {
|
|
Shinya Kitaoka |
120a6e |
ToonzScene *m_scene;
|
|
Shinya Kitaoka |
120a6e |
DecodeFileExistsFunc(ToonzScene *scene) : m_scene(scene) {}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
473e70 |
QString conflictString(const TFilePath &fp) const override;
|
|
Shinya Kitaoka |
473e70 |
bool operator()(const TFilePath &fp) const override;
|
|
Shinya Kitaoka |
120a6e |
};
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
public:
|
|
Shinya Kitaoka |
120a6e |
OverwriteDialog();
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
bool cancelPressed() const { return m_cancelPressed; }
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
Resolution execute(TFilePath &filePath, const ExistsFunc &exists,
|
|
Shinya Kitaoka |
120a6e |
Resolution acceptedRes = ALL_RESOLUTIONS,
|
|
Shinya Kitaoka |
120a6e |
Flags flags = NO_FLAG);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
//--------------------- Legacy Functions ------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
// The following functions are deprecated and retained for backward
|
|
Shinya Kitaoka |
120a6e |
// compatibility only
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
//! Returns the resolution type chosen by the user
|
|
Shinya Kitaoka |
120a6e |
Resolution getChoice() const { return m_choice; }
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
//! Returns the suffix to be added at the base file name when the chosen
|
|
Shinya Kitaoka |
120a6e |
//! resolution type is \t KEEP_OLD.
|
|
Shinya Kitaoka |
120a6e |
std::wstring getSuffix();
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
//! Resets state variables
|
|
Shinya Kitaoka |
120a6e |
void reset();
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
/*! this method has to be called for each filepath to be imported. Only if
|
|
Shinya Kitaoka |
120a6e |
necessary, it opens a popup.
|
|
Shinya Kitaoka |
120a6e |
put parameter multiLoad to true only if you are importing more then one level
|
|
Shinya Kitaoka |
120a6e |
(so that the button 'apply to all' appears in the dialog)*/
|
|
Shinya Kitaoka |
120a6e |
std::wstring execute(ToonzScene *scene, const TFilePath &levelPath,
|
|
Shinya Kitaoka |
120a6e |
bool multiLoad);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
protected slots:
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void applyToAll();
|
|
Shinya Kitaoka |
120a6e |
void cancel();
|
|
Shinya Kitaoka |
120a6e |
void onButtonClicked(int);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
private:
|
|
Shinya Kitaoka |
120a6e |
bool m_applyToAll;
|
|
Shinya Kitaoka |
120a6e |
bool m_cancelPressed;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
Resolution m_choice;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
QLabel *m_label;
|
|
Shinya Kitaoka |
120a6e |
QRadioButton *m_overwrite;
|
|
Shinya Kitaoka |
120a6e |
QRadioButton *m_keep;
|
|
Shinya Kitaoka |
120a6e |
QRadioButton *m_rename;
|
|
Shinya Kitaoka |
120a6e |
DVGui::LineEdit *m_suffix;
|
|
Shinya Kitaoka |
120a6e |
QPushButton *m_okBtn, *m_okToAllBtn, *m_cancelBtn;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
private:
|
|
Shinya Kitaoka |
120a6e |
TFilePath addSuffix(const TFilePath &src) const;
|
|
Toshihiro Shimizu |
890ddd |
};
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
#endif // OVERWRITEPOPUP_H
|