#pragma once #ifndef CAMERASETTINGSWIDGET_H #define CAMERASETTINGSWIDGET_H #ifdef _MSC_VER #pragma warning(disable : 4251) #endif #include "tcommon.h" #include "tgeometry.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 #include #include #include #include class TCamera; class QRadioButton; class QComboBox; class QLabel; class ResListManager; class TFilePath; class TXshSimpleLevel; class TXshLevel; namespace DVGui { class LineEdit; class DoubleLineEdit; class IntLineEdit; class MeasuredDoubleLineEdit; class CheckBox; } // namespace DVGui //--------------------------------------------------------------- class SimpleExpValidator final : public QValidator { public: SimpleExpValidator(QObject *parent) : QValidator(parent){}; State validate(QString &input, int &pos) const override; }; //--------------------------------------------------------------- // for A/R input field class SimpleExpField final : public QLineEdit { SimpleExpValidator *m_validator; QString m_previousValue; public: SimpleExpField(QWidget *parent); void setValue(double); void setValue(double, int, int); double getValue(); protected: void focusInEvent(QFocusEvent *event) override; void focusOutEvent(QFocusEvent *event) override; }; //--------------------------------------------------------------- class DVAPI CameraSettingsWidget final : public QFrame { friend class StartupPopup; Q_OBJECT bool m_forCleanup; QRadioButton *m_xPrev, *m_yPrev, *m_arPrev; QRadioButton *m_inchPrev, *m_dotPrev; DVGui::MeasuredDoubleLineEdit *m_lxFld, *m_lyFld; SimpleExpField *m_arFld; double m_arValue; DVGui::IntLineEdit *m_xResFld, *m_yResFld; DVGui::DoubleLineEdit *m_xDpiFld, *m_yDpiFld; QLabel *m_dpiLabel; QLabel *m_resLabel; QLabel *m_xLabel; QLabel *m_unitLabel; QPushButton *m_fspChk; // Force Squared Pixel => dpix == dpiy QPushButton *m_useLevelSettingsBtn; QComboBox *m_presetListOm; QPushButton *m_addPresetBtn, *m_removePresetBtn; DVGui::MeasuredDoubleLineEdit *m_offsX, *m_offsY; QString m_presetListFile; // needed by "use level settings" TXshSimpleLevel *m_currentLevel; void savePresetList(); void loadPresetList(); bool parsePresetString(const QString &str, QString &name, int &xres, int &yres, QString &ar); bool parsePresetString(const QString &str, QString &name, int &xres, int &yres, double &fx, double &fy, QString &xoffset, QString &yoffset, double &ar, bool forCleanup = false); public: CameraSettingsWidget(bool forCleanup = false); ~CameraSettingsWidget(); void setPresetListFile(const TFilePath &fp); // Defines the level referred by the button "Use level settings". // Calling setCurrentLevel(0) disables the button void setCurrentLevel(TXshLevel *); // camera => widget fields (i.e. initialize widget) void setFields(const TCamera *camera); // widget fields => camera return true if the value is actually changed bool getFields(TCamera *camera); QSize sizeHint() const override { return minimumSize(); } // The aspect ratio can be expressed as a fraction (e.g. "4/3") // The following methods convert code/decode the value static double aspectRatioStringToValue(const QString &s); /*--- * カメラの縦横ピクセル値を入力できるようにし、valueがX/Yの値に近かったら、"X/Y"と表示する * ---*/ static QString aspectRatioValueToString(double ar, int width = 0, int height = 0); // the current camera dimension (in inches) TDimensionD getSize() const; // the current camera resolution (in pixels) TDimension getRes() const; /*--- cleanupCameraSettingsWidgetからポインタを受け取る ---*/ void setOffsetWidgetPointers(DVGui::MeasuredDoubleLineEdit *offsX, DVGui::MeasuredDoubleLineEdit *offsY) { m_offsX = offsX; m_offsY = offsY; } protected: bool eventFilter(QObject *obj, QEvent *e) override; void showEvent(QShowEvent *e) override; void hComputeLx(); void hComputeLy(); void vComputeLx(); void vComputeLy(); void computeAr(); void computeXRes(); void computeYRes(); void computeXDpi(); void computeYDpi(); void computeResOrDpi(); void updatePresetListOm(); void setArFld(double ar); protected slots: void onLxChanged(); void onLyChanged(); void onArChanged(); void onXResChanged(); void onYResChanged(); void onXDpiChanged(); void onYDpiChanged(); void onFspChanged(bool checked); void onPrevToggled(bool checked); void onPresetSelected(const QString &); void addPreset(); void removePreset(); void useLevelSettings(); signals: void changed(); // some value has been changed void levelSettingsUsed(); // the "Use level settings" button has been pressed. // Note: a changed() signal is always emitted after levelSettingsUsed() }; #endif