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