shun_iwasawa 21a6b6
#pragma once
shun_iwasawa 21a6b6
shun_iwasawa 21a6b6
#ifndef PENCILTESTPOPUP_H
shun_iwasawa 21a6b6
#define PENCILTESTPOPUP_H
shun_iwasawa 21a6b6
shun_iwasawa 21a6b6
#include "toonzqt/dvdialog.h"
shun_iwasawa 84461e
#include "toonzqt/lineedit.h"
shun_iwasawa 60d966
#include "toonz/namebuilder.h"
shun-iwasawa 78dff8
#include "opencv2/opencv.hpp"
shun-iwasawa 70632f
#include "tfilepath.h"
shun-iwasawa ef0f8b
#include "toonz/tproject.h"
shun-iwasawa d9416c
#include "filebrowserpopup.h"
shun_iwasawa 21a6b6
shun-iwasawa f28b21
#include <qabstractvideosurface></qabstractvideosurface>
shun-iwasawa f28b21
#include <qrunnable></qrunnable>
shun-iwasawa 78dff8
#include <qlineedit></qlineedit>
shun-iwasawa e12407
#include <qpushbutton></qpushbutton>
shun_iwasawa 21a6b6
shun_iwasawa 21a6b6
// forward decl.
shun_iwasawa 21a6b6
class QCamera;
shun_iwasawa 21a6b6
class QCameraImageCapture;
shun_iwasawa 21a6b6
shun_iwasawa 21a6b6
class QComboBox;
shun_iwasawa 21a6b6
class QSlider;
shun_iwasawa 21a6b6
class QCheckBox;
shun_iwasawa 21a6b6
class QVideoFrame;
shun_iwasawa 7b62b4
class QTimer;
shun_iwasawa 84461e
class QIntValidator;
shun_iwasawa 84461e
class QRegExpValidator;
shun-iwasawa d9416c
class QLabel;
shun-iwasawa d9416c
class QGroupBox;
shun-iwasawa 32ce3e
class QRadioButton;
shun-iwasawa 5bdd2f
#ifdef MACOSX
shun-iwasawa 5bdd2f
class QCameraViewfinder;
shun-iwasawa 5bdd2f
#endif
shun_iwasawa 21a6b6
shun_iwasawa 21a6b6
namespace DVGui {
shun_iwasawa 21a6b6
class FileField;
shun_iwasawa 21a6b6
class IntField;
shun-iwasawa f28b21
class IntLineEdit;
shun-iwasawa ba4abf
}  // namespace DVGui
shun_iwasawa 21a6b6
shun_iwasawa 6c81f0
class CameraCaptureLevelControl;
shun_iwasawa 6c81f0
shun-iwasawa f28b21
//=============================================================================
shun-iwasawa f28b21
// MyVideoWidget
shun-iwasawa f28b21
//-----------------------------------------------------------------------------
shun-iwasawa f28b21
shun-iwasawa f28b21
class MyVideoWidget : public QWidget {
shun_iwasawa 21a6b6
  Q_OBJECT
shun_iwasawa 21a6b6
shun_iwasawa 21a6b6
  QImage m_image;
shun_iwasawa 21a6b6
  QImage m_previousImage;
shun_iwasawa 7b62b4
  int m_countDownTime;
shun_iwasawa 21a6b6
  bool m_showOnionSkin;
shun_iwasawa 21a6b6
  int m_onionOpacity;
shun_iwasawa 21a6b6
  bool m_upsideDown;
shun_iwasawa 21a6b6
shun-iwasawa f28b21
  QRect m_subCameraRect;
shun-iwasawa f28b21
  QRect m_preSubCameraRect;
shun-iwasawa f28b21
  QPoint m_dragStartPos;
shun-iwasawa f28b21
shun-iwasawa 78dff8
  QRect m_targetRect;
shun-iwasawa 78dff8
  QTransform m_S2V_Transform;  // surface to video transform
shun-iwasawa f28b21
  enum SUBHANDLE {
shun-iwasawa f28b21
    HandleNone,
shun-iwasawa f28b21
    HandleFrame,
shun-iwasawa f28b21
    HandleTopLeft,
shun-iwasawa f28b21
    HandleTopRight,
shun-iwasawa f28b21
    HandleBottomLeft,
shun-iwasawa f28b21
    HandleBottomRight,
shun-iwasawa f28b21
    HandleLeft,
shun-iwasawa f28b21
    HandleTop,
shun-iwasawa f28b21
    HandleRight,
shun-iwasawa f28b21
    HandleBottom
shun-iwasawa f28b21
  } m_activeSubHandle = HandleNone;
shun-iwasawa f28b21
  void drawSubCamera(QPainter&);
shun-iwasawa f28b21
shun_iwasawa 21a6b6
public:
shun-iwasawa f28b21
  MyVideoWidget(QWidget* parent = 0);
shun-iwasawa f28b21
shun_iwasawa 21a6b6
  void setImage(const QImage& image) {
shun_iwasawa 21a6b6
    m_image = image;
shun_iwasawa 21a6b6
    update();
shun_iwasawa 21a6b6
  }
shun-iwasawa f28b21
shun_iwasawa 21a6b6
  void setShowOnionSkin(bool on) { m_showOnionSkin = on; }
shun_iwasawa 21a6b6
  void setOnionOpacity(int value) { m_onionOpacity = value; }
shun-iwasawa f28b21
  void setPreviousImage(QImage prevImage) { m_previousImage = prevImage; }
shun_iwasawa 21a6b6
shun_iwasawa 7b62b4
  void showCountDownTime(int time) {
shun_iwasawa 7b62b4
    m_countDownTime = time;
shun_iwasawa 7b62b4
    repaint();
shun_iwasawa 7b62b4
  }
shun_iwasawa 7b62b4
shun-iwasawa e12407
  void setSubCameraRect(QRect rect);
shun-iwasawa f28b21
  QRect subCameraRect() { return m_subCameraRect; }
shun_iwasawa 339a9c
shun-iwasawa 78dff8
  void computeTransform(QSize imgSize);
shun-iwasawa 78dff8
shun_iwasawa 21a6b6
protected:
shun-iwasawa f28b21
  void paintEvent(QPaintEvent* event) override;
shun-iwasawa f28b21
  void resizeEvent(QResizeEvent* event) override;
shun-iwasawa f28b21
shun-iwasawa f28b21
  void mouseMoveEvent(QMouseEvent* event) override;
shun-iwasawa f28b21
  void mousePressEvent(QMouseEvent* event) override;
shun-iwasawa f28b21
  void mouseReleaseEvent(QMouseEvent* event) override;
shun-iwasawa f28b21
shun_iwasawa 21a6b6
protected slots:
shun_iwasawa 21a6b6
  void onUpsideDownChecked(bool on) { m_upsideDown = on; }
shun-iwasawa f28b21
shun-iwasawa f28b21
signals:
shun-iwasawa f28b21
  void startCamera();
shun-iwasawa f28b21
  void stopCamera();
shun-iwasawa e12407
  void subCameraChanged(bool isDragging);
shun_iwasawa 21a6b6
};
shun_iwasawa 21a6b6
shun_iwasawa 21a6b6
//=============================================================================
shun_iwasawa 84461e
// FrameNumberLineEdit
shun_iwasawa 84461e
// a special Line Edit which accepts imputting alphabets if the preference
shun_iwasawa 84461e
// option
shun_iwasawa 84461e
// "Show ABC Appendix to the Frame Number in Xsheet Cell" is active.
shun_iwasawa 84461e
//-----------------------------------------------------------------------------
shun_iwasawa 84461e
shun-iwasawa ef0f8b
class FrameNumberLineEdit : public DVGui::LineEdit,
shun-iwasawa ef0f8b
                            public TProjectManager::Listener {
shun_iwasawa 84461e
  Q_OBJECT
shun_iwasawa 84461e
  /* having two validators and switch them according to the preferences*/
shun-iwasawa 70632f
  QRegExpValidator *m_regexpValidator, *m_regexpValidator_alt;
shun_iwasawa 84461e
shun_iwasawa 84461e
  void updateValidator();
shun-iwasawa 7bfeb3
  void updateSize();
shun-iwasawa ba4abf
  QString m_textOnFocusIn;
shun_iwasawa 84461e
shun_iwasawa 84461e
public:
shun-iwasawa 70632f
  FrameNumberLineEdit(QWidget* parent = 0, TFrameId fId = TFrameId(1),
shun-iwasawa 70632f
                      bool acceptLetter = true);
shun_iwasawa 84461e
  ~FrameNumberLineEdit() {}
shun_iwasawa 84461e
shun_iwasawa 84461e
  /*! Set text in field to \b value. */
shun-iwasawa 70632f
  void setValue(TFrameId fId);
shun_iwasawa 84461e
  /*! Return an integer with text field value. */
shun-iwasawa 70632f
  TFrameId getValue();
shun_iwasawa 84461e
shun-iwasawa ef0f8b
  // TProjectManager::Listener
shun-iwasawa ef0f8b
  void onProjectSwitched() override;
shun-iwasawa ef0f8b
  void onProjectChanged() override;
shun-iwasawa ef0f8b
shun_iwasawa 84461e
protected:
shun_iwasawa 84461e
  /*! If focus is lost and current text value is out of range emit signal
shun_iwasawa 84461e
  \b editingFinished.*/
shun-iwasawa ba4abf
  void focusInEvent(QFocusEvent*) override;
shun_iwasawa 84461e
  void focusOutEvent(QFocusEvent*) override;
shun_iwasawa 84461e
  void showEvent(QShowEvent* event) override { updateValidator(); }
shun_iwasawa 84461e
};
shun_iwasawa 84461e
shun_iwasawa 84461e
//=============================================================================
shun_iwasawa 339a9c
shun_iwasawa 339a9c
class LevelNameLineEdit : public QLineEdit {
shun_iwasawa 339a9c
  Q_OBJECT
shun_iwasawa 339a9c
  QString m_textOnFocusIn;
shun_iwasawa 339a9c
shun_iwasawa 339a9c
public:
shun_iwasawa 339a9c
  LevelNameLineEdit(QWidget* parent = 0);
shun_iwasawa 339a9c
shun_iwasawa 339a9c
protected:
shun_iwasawa 339a9c
  void focusInEvent(QFocusEvent* e);
shun_iwasawa 339a9c
shun_iwasawa 339a9c
protected slots:
shun_iwasawa 339a9c
  void onEditingFinished();
shun_iwasawa 339a9c
shun_iwasawa 339a9c
signals:
shun_iwasawa 339a9c
  void levelNameEdited();
shun_iwasawa 339a9c
};
shun_iwasawa 339a9c
shun_iwasawa 339a9c
//=============================================================================
shun_iwasawa 60d966
// FlexibleNameCreator
shun_iwasawa 60d966
// Inherits NameCreator, added function for obtaining the previous name and
shun_iwasawa 60d966
// setting the current name.
shun_iwasawa 60d966
shun_iwasawa 60d966
class FlexibleNameCreator final : public NameCreator {
shun_iwasawa 60d966
public:
shun_iwasawa 60d966
  FlexibleNameCreator() {}
shun_iwasawa 60d966
  std::wstring getPrevious();
shun_iwasawa 60d966
  bool setCurrent(std::wstring name);
shun_iwasawa 60d966
};
shun_iwasawa 60d966
shun_iwasawa 60d966
//=============================================================================
shun_iwasawa e56ea8
// PencilTestSaveInFolderPopup
shun_iwasawa e56ea8
//-----------------------------------------------------------------------------
shun_iwasawa e56ea8
shun_iwasawa e56ea8
class PencilTestSaveInFolderPopup : public DVGui::Dialog {
shun_iwasawa e56ea8
  Q_OBJECT
shun_iwasawa e56ea8
shun_iwasawa e56ea8
  DVGui::FileField* m_parentFolderField;
shun_iwasawa e56ea8
  QLineEdit *m_projectField, *m_episodeField, *m_sequenceField, *m_sceneField,
shun_iwasawa e56ea8
      *m_subFolderNameField;
shun_iwasawa e56ea8
shun-iwasawa 3f818e
  QCheckBox *m_subFolderCB, *m_autoSubNameCB, *m_createSceneInFolderCB;
shun_iwasawa e56ea8
  QComboBox* m_subNameFormatCombo;
shun_iwasawa e56ea8
shun-iwasawa 3f818e
  void createSceneInFolder();
shun-iwasawa 3f818e
shun_iwasawa e56ea8
public:
shun_iwasawa e56ea8
  PencilTestSaveInFolderPopup(QWidget* parent = 0);
shun_iwasawa e56ea8
  QString getPath();
shun_iwasawa 135173
  QString getParentPath();
shun-iwasawa 3f818e
  void updateParentFolder();
shun-iwasawa 3f818e
shun-iwasawa 3f818e
protected:
shun-iwasawa 3f818e
  void showEvent(QShowEvent* event);
shun_iwasawa e56ea8
shun_iwasawa e56ea8
protected slots:
shun_iwasawa e56ea8
  void updateSubFolderName();
shun_iwasawa e56ea8
  void onAutoSubNameCBClicked(bool);
shun_iwasawa e56ea8
  void onShowPopupOnLaunchCBClicked(bool);
shun-iwasawa 3f818e
  void onCreateSceneInFolderCBClicked(bool);
shun_iwasawa 135173
  void onSetAsDefaultBtnPressed();
shun_iwasawa e56ea8
  void onOkPressed();
shun_iwasawa e56ea8
};
shun_iwasawa e56ea8
shun_iwasawa e56ea8
//=============================================================================
shun-iwasawa e12407
// SubCameraButton
shun-iwasawa e12407
// button with context menu to open preset
shun-iwasawa e12407
//-----------------------------------------------------------------------------
shun-iwasawa e12407
shun-iwasawa e12407
class SubCameraButton : public QPushButton {
shun-iwasawa e12407
  Q_OBJECT
shun-iwasawa e12407
  std::unique_ptr<qsettings> m_settings;</qsettings>
shun-iwasawa e12407
shun-iwasawa e12407
  QSize m_curResolution;
shun-iwasawa e12407
  QRect m_curSubCamera;
shun-iwasawa 32ce3e
  double m_currentDpi;
shun-iwasawa e12407
shun-iwasawa e12407
public:
shun-iwasawa e12407
  SubCameraButton(const QString& text, QWidget* parent = 0);
shun-iwasawa e12407
  void setCurResolution(const QSize& size) { m_curResolution = size; }
shun-iwasawa e12407
  void setCurSubCamera(const QRect& rect) { m_curSubCamera = rect; }
shun-iwasawa 32ce3e
  void setCurDpi(const double& dpi) { m_currentDpi = dpi; }
shun-iwasawa e12407
shun-iwasawa e12407
protected:
shun-iwasawa e12407
  void contextMenuEvent(QContextMenuEvent* event) override;
shun-iwasawa e12407
protected slots:
shun-iwasawa e12407
  void onSubCameraAct();
shun-iwasawa e12407
  void onSaveSubCamera();
shun-iwasawa e12407
  void onDeletePreset();
shun-iwasawa e12407
signals:
shun-iwasawa 32ce3e
  void subCameraPresetSelected(const QRect&, const double dpi);
shun-iwasawa e12407
};
shun-iwasawa e12407
shun-iwasawa e12407
//=============================================================================
shun_iwasawa 21a6b6
// PencilTestPopup
shun_iwasawa 21a6b6
//-----------------------------------------------------------------------------
shun_iwasawa 21a6b6
shun_iwasawa 21a6b6
class PencilTestPopup : public DVGui::Dialog {
shun_iwasawa 21a6b6
  Q_OBJECT
shun_iwasawa 21a6b6
shun-iwasawa 78dff8
  QTimer* m_timer;
shun-iwasawa 78dff8
  cv::VideoCapture m_cvWebcam;
shun-iwasawa 78dff8
  QSize m_resolution;
shun-iwasawa 78dff8
shun-iwasawa 78dff8
  //--------
shun-iwasawa 78dff8
shun_iwasawa 21a6b6
  QCamera* m_currentCamera;
shun_iwasawa 21a6b6
  QString m_deviceName;
shun-iwasawa f28b21
  MyVideoWidget* m_videoWidget;
shun_iwasawa 21a6b6
shun_iwasawa 21a6b6
  QComboBox *m_cameraListCombo, *m_resolutionCombo, *m_fileTypeCombo,
shun_iwasawa 21a6b6
      *m_colorTypeCombo;
shun_iwasawa 339a9c
  LevelNameLineEdit* m_levelNameEdit;
shun-iwasawa d9416c
  QCheckBox *m_upsideDownCB, *m_saveOnCaptureCB;
shun-iwasawa d9416c
  QGroupBox *m_onionSkinGBox, *m_timerGBox;
shun_iwasawa 7b62b4
  QPushButton *m_fileFormatOptionButton, *m_captureWhiteBGButton,
Jeremy Bullock 83d3e3
      *m_captureButton, *m_loadImageButton;
shun_iwasawa 21a6b6
  DVGui::FileField* m_saveInFileFld;
shun_iwasawa 84461e
  FrameNumberLineEdit* m_frameNumberEdit;
shun_iwasawa 6c81f0
  DVGui::IntField *m_bgReductionFld, *m_onionOpacityFld, *m_timerIntervalFld;
shun_iwasawa 7b62b4
shun_iwasawa 7b62b4
  QTimer *m_captureTimer, *m_countdownTimer;
shun_iwasawa 21a6b6
shun-iwasawa 78dff8
  cv::Mat m_whiteBGImg;
shun_iwasawa 21a6b6
shun_iwasawa b7d07a
  // used only for Windows
shun_iwasawa b7d07a
  QPushButton* m_captureFilterSettingsBtn;
shun_iwasawa b7d07a
shun_iwasawa e56ea8
  PencilTestSaveInFolderPopup* m_saveInFolderPopup;
shun_iwasawa e56ea8
shun_iwasawa 6c81f0
  CameraCaptureLevelControl* m_camCapLevelControl;
shun_iwasawa 6c81f0
shun_iwasawa 1f6605
  QLabel* m_frameInfoLabel;
shun_iwasawa 1f6605
shun_iwasawa 60d966
  QToolButton* m_previousLevelButton;
shun_iwasawa 60d966
shun-iwasawa e12407
  SubCameraButton* m_subcameraButton;
shun-iwasawa f28b21
  DVGui::IntLineEdit *m_subWidthFld, *m_subHeightFld;
shun-iwasawa e12407
  DVGui::IntLineEdit *m_subXPosFld, *m_subYPosFld;
shun-iwasawa f28b21
  QSize m_allowedCameraSize;
shun-iwasawa f28b21
shun_iwasawa 21a6b6
  bool m_captureWhiteBGCue;
shun_iwasawa 21a6b6
  bool m_captureCue;
shun-iwasawa 58faa2
  bool m_alwaysOverwrite = false;
shun-iwasawa 78dff8
  bool m_useMjpg;
shun-iwasawa 78dff8
#ifdef _WIN32
shun-iwasawa 78dff8
  bool m_useDirectShow;
shun-iwasawa 78dff8
#endif
shun_iwasawa 21a6b6
shun-iwasawa d9416c
  // calibration feature
shun-iwasawa d9416c
  struct Calibration {
shun-iwasawa d9416c
    // Parameters
shun-iwasawa d9416c
    bool captureCue    = false;
shun-iwasawa d9416c
    cv::Size boardSize = {10, 7};
shun-iwasawa d9416c
    int refCaptured    = 0;
shun-iwasawa d9416c
    std::vector<std::vector<cv::point3f>> obj_points;</std::vector<cv::point3f>
shun-iwasawa d9416c
    std::vector<std::vector<cv::point2f>> image_points;</std::vector<cv::point2f>
shun-iwasawa d9416c
    cv::Mat mapX, mapY;
shun-iwasawa d9416c
    bool isValid = false;
shun-iwasawa d9416c
    // UIs
shun-iwasawa d9416c
    QPushButton *capBtn, *newBtn, *loadBtn, *cancelBtn, *exportBtn;
shun-iwasawa d9416c
    QLabel* label;
shun-iwasawa d9416c
    QGroupBox* groupBox;
shun-iwasawa d9416c
  } m_calibration;
shun-iwasawa d9416c
shun-iwasawa 0bd4d6
  // dpi settings
shun-iwasawa 0bd4d6
  bool m_doAutoDpi;
shun-iwasawa 0bd4d6
  double m_customDpi;
shun-iwasawa 0bd4d6
  QWidget* m_dpiMenuWidget;
shun-iwasawa 0bd4d6
  QPushButton* m_dpiBtn;
shun-iwasawa 32ce3e
  QRadioButton *m_autoDpiRadioBtn, *m_customDpiRadioBtn;
shun-iwasawa 0bd4d6
  QLineEdit* m_customDpiField;
shun-iwasawa 0bd4d6
shun-iwasawa d9416c
  void captureCalibrationRefImage(cv::Mat& procImage);
shun-iwasawa d9416c
shun-iwasawa 78dff8
  void processImage(cv::Mat& procImage);
shun-iwasawa f28b21
  bool importImage(QImage image);
shun_iwasawa 21a6b6
shun_iwasawa 60d966
  void setToNextNewLevel();
shun_iwasawa 60d966
  void updateLevelNameAndFrame(std::wstring levelName);
shun_iwasawa 60d966
shun-iwasawa 78dff8
  void getWebcamImage();
shun-iwasawa 78dff8
shun-iwasawa 78dff8
  QMenu* createOptionsMenu();
shun-iwasawa 78dff8
shun-iwasawa 78dff8
  int translateIndex(int camIndex);
shun-iwasawa 78dff8
shun-iwasawa d9416c
  QString getCurrentCalibFilePath();
shun-iwasawa d9416c
shun-iwasawa 0bd4d6
  QWidget* createDpiMenuWidget();
shun-iwasawa 0bd4d6
shun_iwasawa 21a6b6
public:
shun_iwasawa 21a6b6
  PencilTestPopup();
shun_iwasawa 21a6b6
  ~PencilTestPopup();
shun_iwasawa 21a6b6
shun_iwasawa 21a6b6
protected:
artisteacher fd1c1e
  void showEvent(QShowEvent* event) override;
artisteacher fd1c1e
  void hideEvent(QHideEvent* event) override;
artisteacher fd1c1e
  void keyPressEvent(QKeyEvent* event) override;
shun_iwasawa 7b62b4
shun-iwasawa ba4abf
  bool event(QEvent* e) override;
shun-iwasawa ba4abf
shun_iwasawa 21a6b6
protected slots:
shun_iwasawa 21a6b6
  void refreshCameraList();
shun_iwasawa 21a6b6
  void onCameraListComboActivated(int index);
shun-iwasawa 78dff8
  void onResolutionComboActivated();
shun_iwasawa 21a6b6
  void onFileFormatOptionButtonPressed();
shun_iwasawa 339a9c
  void onLevelNameEdited();
shun_iwasawa 21a6b6
  void onNextName();
shun_iwasawa 60d966
  void onPreviousName();
shun_iwasawa 21a6b6
  void onColorTypeComboChanged(int index);
shun-iwasawa 78dff8
  void onFrameCaptured(cv::Mat& image);
shun_iwasawa 21a6b6
  void onCaptureWhiteBGButtonPressed();
shun_iwasawa 21a6b6
  void onOnionCBToggled(bool);
Jeremy Bullock 83d3e3
  void onLoadImageButtonPressed();
shun_iwasawa 21a6b6
  void onOnionOpacityFldEdited();
shun_iwasawa 7b62b4
  void onTimerCBToggled(bool);
shun_iwasawa 7b62b4
  void onCaptureTimerTimeout();
shun_iwasawa 7b62b4
  void onCountDown();
shun_iwasawa 21a6b6
shun_iwasawa 7b62b4
  void onCaptureButtonClicked(bool);
shun_iwasawa b7d07a
  void onCaptureFilterSettingsBtnPressed();
shun_iwasawa e56ea8
shun_iwasawa 1f6605
  void refreshFrameInfo();
shun_iwasawa 1f6605
shun-iwasawa 3f818e
  void onSaveInPathEdited();
shun-iwasawa 3f818e
  void onSceneSwitched();
shun-iwasawa 3f818e
shun-iwasawa f28b21
  void onSubCameraToggled(bool);
shun-iwasawa e12407
  void onSubCameraChanged(bool isDragging);
shun-iwasawa e12407
  void onSubCameraRectEdited();
shun-iwasawa 32ce3e
  void onSubCameraPresetSelected(const QRect&, const double);
shun-iwasawa f28b21
shun-iwasawa 78dff8
  void onTimeout();
shun-iwasawa d9416c
shun-iwasawa d9416c
  void onCalibCapBtnClicked();
shun-iwasawa d9416c
  void onCalibNewBtnClicked();
shun-iwasawa d9416c
  void resetCalibSettingsFromFile();
shun-iwasawa d9416c
  void onCalibLoadBtnClicked();
shun-iwasawa d9416c
  void onCalibExportBtnClicked();
shun-iwasawa 60774e
  void onCalibReadme();
shun-iwasawa 0bd4d6
  void onPreferenceChanged(const QString&);
shun-iwasawa 60774e
shun_iwasawa e56ea8
public slots:
shun_iwasawa e56ea8
  void openSaveInFolderPopup();
shun_iwasawa 21a6b6
};
shun_iwasawa 21a6b6
shun-iwasawa d9416c
//=============================================================================
shun-iwasawa d9416c
shun-iwasawa d9416c
class ExportCalibrationFilePopup final : public GenericSaveFilePopup {
shun-iwasawa d9416c
  Q_OBJECT
shun-iwasawa d9416c
public:
shun-iwasawa d9416c
  ExportCalibrationFilePopup(QWidget* parent);
shun-iwasawa d9416c
shun-iwasawa d9416c
protected:
shun-iwasawa d9416c
  void showEvent(QShowEvent*) override;
shun-iwasawa d9416c
};
shun-iwasawa d9416c
shun-iwasawa d9416c
//=============================================================================
shun-iwasawa d9416c
shun-iwasawa d9416c
class LoadCalibrationFilePopup final : public GenericLoadFilePopup {
shun-iwasawa d9416c
  Q_OBJECT
shun-iwasawa d9416c
public:
shun-iwasawa d9416c
  LoadCalibrationFilePopup(QWidget* parent);
shun-iwasawa d9416c
shun-iwasawa d9416c
protected:
shun-iwasawa d9416c
  void showEvent(QShowEvent*) override;
shun-iwasawa d9416c
};
shun-iwasawa d9416c
artisteacher fd1c1e
#endif