d1f6c4e95b
* add final specifiers * apply clang-format * fix for macOS
166 lines
4.6 KiB
C++
166 lines
4.6 KiB
C++
#pragma once
|
|
|
|
#ifndef CLEANUPPOPUP_H
|
|
#define CLEANUPPOPUP_H
|
|
|
|
#include <memory>
|
|
|
|
// TnzQt includes
|
|
#include "toonzqt/validatedchoicedialog.h"
|
|
|
|
// TnzCore includes
|
|
#include "tfilepath.h"
|
|
#include "timage.h"
|
|
|
|
// boost includes
|
|
#include <boost/container/vector.hpp>
|
|
|
|
#include <QMap>
|
|
|
|
namespace bc = boost::container;
|
|
|
|
//================================================
|
|
|
|
// Forward declarations
|
|
|
|
class TXshSimpleLevel;
|
|
class ImageViewer;
|
|
class CleanupParameters;
|
|
class LevelUpdater;
|
|
|
|
namespace DVGui {
|
|
class LineEdit;
|
|
}
|
|
|
|
class QProgressBar;
|
|
class QLabel;
|
|
class QPushButton;
|
|
class QHideEvent;
|
|
class QGroupBox;
|
|
|
|
//================================================
|
|
|
|
//*****************************************************************************
|
|
// CleanupPopup declaration
|
|
//*****************************************************************************
|
|
|
|
class CleanupPopup final : public QDialog {
|
|
Q_OBJECT
|
|
|
|
public:
|
|
CleanupPopup();
|
|
~CleanupPopup();
|
|
|
|
void execute();
|
|
|
|
protected:
|
|
void closeEvent(QCloseEvent *) override;
|
|
|
|
private:
|
|
class OverwriteDialog;
|
|
struct CleanupLevel;
|
|
|
|
private:
|
|
QProgressBar *m_progressBar;
|
|
QLabel *m_progressLabel;
|
|
QLabel *m_cleanupQuestionLabel;
|
|
ImageViewer *m_imageViewer;
|
|
QGroupBox *m_imgViewBox;
|
|
|
|
/*---ビジー時にボタンをUnableするため---*/
|
|
QPushButton *m_cleanupAllButton;
|
|
QPushButton *m_cleanupButton;
|
|
QPushButton *m_skipButton;
|
|
|
|
std::unique_ptr<LevelUpdater> m_updater; //!< The cleanup level updater.
|
|
|
|
bc::vector<CleanupLevel>
|
|
m_cleanupLevels; //!< List of levels to be cleanupped.
|
|
std::pair<int, int> m_idx, //!< Current cleanup list position.
|
|
m_completion; //!< Count of completed frames versus total frames.
|
|
bool m_firstLevelFrame; //!< Whether this is the first cleanupped frame on
|
|
//! current level. Used in some autoadjust cases.
|
|
|
|
std::vector<TFrameId> m_cleanuppedLevelFrames; //!< Current level's list of
|
|
//! cleanupped frames. Used
|
|
//! to selectively build the level's unpainted backup.
|
|
std::unique_ptr<CleanupParameters>
|
|
m_params; //!< Cleanup params used to cleanup.
|
|
|
|
std::unique_ptr<OverwriteDialog>
|
|
m_overwriteDialog; //!< Dialog about level overwriting options.
|
|
|
|
/* Palette上書きの判断をするために、保存先Levelが既に存在するかどうかのフラグ
|
|
ただし、REPLACE又はNOPAINT_ONLYの場合はこのフラグは無視して必ずPaletteを上書きする
|
|
*/
|
|
QMap<TXshSimpleLevel *, bool> m_levelAlreadyExists;
|
|
/*--- 再Cleanupの場合、Xsheetを再現するためにパスを取っておく ---*/
|
|
TFilePath m_originalLevelPath;
|
|
/* Cleanup後、Paletteを更新するかどうかのフラグ。再Cleanupの場合は、
|
|
m_actionがREPLACE_LEVELの場合以外は元のPaletteを保持する。
|
|
*/
|
|
bool m_keepOriginalPalette;
|
|
TPalette *m_originalPalette;
|
|
|
|
private:
|
|
void reset();
|
|
void buildCleanupList();
|
|
bool
|
|
analyzeCleanupList(); //!< Checks m_cleanupFrames for existing output levels
|
|
//! and updates it depending on user choices. \return Whether cleanup can
|
|
//! take place.
|
|
bool isValidPosition(const std::pair<int, int> &pos)
|
|
const; //!< Returns whether specified cleanup position is valid.
|
|
QString currentString() const;
|
|
TImageP currentImage() const;
|
|
|
|
QString setupLevel(); //!< Prepares level for cleanup. \return An eventual
|
|
//! failure message.
|
|
QString resetLevel(); //!< Erases existing output for the cleanup operation.
|
|
//!\return An eventual failure message.
|
|
void closeLevel();
|
|
|
|
void cleanupFrame();
|
|
void advanceFrame();
|
|
|
|
/*--- 進捗をタスクバーから確認するため、MainWindowのタイトルバーに表示する
|
|
* ---*/
|
|
void updateTitleString();
|
|
|
|
private slots:
|
|
|
|
void onCleanupFrame();
|
|
void onSkipFrame();
|
|
void onCleanupAllFrame();
|
|
void onCancelCleanup();
|
|
void onValueChanged(int);
|
|
void onImgViewBoxToggled(bool);
|
|
};
|
|
|
|
//*****************************************************************************
|
|
// CleanupPopup::OverwriteDialog declaration (private)
|
|
//*****************************************************************************
|
|
|
|
class CleanupPopup::OverwriteDialog final
|
|
: public DVGui::ValidatedChoiceDialog {
|
|
Q_OBJECT
|
|
|
|
public:
|
|
OverwriteDialog();
|
|
|
|
void reset() override;
|
|
|
|
private:
|
|
DVGui::LineEdit *m_suffix;
|
|
QString m_suffixText;
|
|
|
|
private:
|
|
QString acceptResolution(void *obj, int resolution, bool applyToAll) override;
|
|
void initializeUserInteraction(const void *obj) override;
|
|
|
|
private slots:
|
|
|
|
void onButtonClicked(int buttonId);
|
|
};
|
|
|
|
#endif // CLEANUPPOPUP_H
|