Shinya Kitaoka 810553
#pragma once
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#ifndef PREFERENCESPOPUP_H
Toshihiro Shimizu 890ddd
#define PREFERENCESPOPUP_H
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
// TnzQt includes
Toshihiro Shimizu 890ddd
#include "toonzqt/dvdialog.h"
Toshihiro Shimizu 890ddd
#include "toonzqt/intfield.h"
Toshihiro Shimizu 890ddd
#include "toonzqt/doublefield.h"
Toshihiro Shimizu 890ddd
#include "toonzqt/colorfield.h"
Toshihiro Shimizu 890ddd
#include "toonzqt/checkbox.h"
turtletooth 04d8fd
#include "toonzqt/filefield.h"
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
// TnzLib includes
Toshihiro Shimizu 890ddd
#include "toonz/preferences.h"
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
// Qt includes
Toshihiro Shimizu 890ddd
#include <qcombobox></qcombobox>
manongjohn b66bc4
#include <qfontcombobox></qfontcombobox>
shun-iwasawa c54dfb
#include <qtextedit></qtextedit>
shun-iwasawa 215a5b
#include <qopenglwidget></qopenglwidget>
shun-iwasawa 215a5b
#include <qsurfaceformat></qsurfaceformat>
shun-iwasawa 215a5b
#include <qopenglfunctions></qopenglfunctions>
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//==============================================================
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//    Forward declarations
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
class QLineEdit;
Toshihiro Shimizu 890ddd
class QPushButton;
Toshihiro Shimizu 890ddd
class QLabel;
Jeremy Bullock 33e7d1
class QGroupBox;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//==============================================================
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//**********************************************************************************
Toshihiro Shimizu 890ddd
//    PreferencesPopup  definition
Toshihiro Shimizu 890ddd
//**********************************************************************************
shun-iwasawa 8fb291
typedef QPair<qstring, qvariant=""> ComboBoxItem;</qstring,>
Toshihiro Shimizu 890ddd
shun-iwasawa 8fb291
class SizeField final : public QWidget {
Shinya Kitaoka 120a6e
  Q_OBJECT
shun-iwasawa 8fb291
  DVGui::IntLineEdit *m_fieldX, *m_fieldY;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
public:
shun-iwasawa 8fb291
  SizeField(QSize min, QSize max, QSize value = QSize(),
shun-iwasawa 8fb291
            QWidget* parent = nullptr);
shun-iwasawa 8fb291
  QSize getValue() const;
shun-iwasawa 8fb291
  void setValue(const QSize&);
shun-iwasawa 8fb291
signals:
shun-iwasawa 8fb291
  void editingFinished();
shun-iwasawa 8fb291
};
Shinya Kitaoka 120a6e
shun-iwasawa 8fb291
class PreferencesPopup;
Jeremy Bullock 733ddb
shun-iwasawa 8fb291
typedef void (PreferencesPopup::*OnEditedPopupFunc)();
Shinya Kitaoka 120a6e
shun-iwasawa 8fb291
class PreferencesPopup final : public QDialog {
shun-iwasawa 8fb291
  Q_OBJECT
Shinya Kitaoka 120a6e
shun-iwasawa 8fb291
  QMap<qwidget*, preferencesitemid=""> m_controlIdMap;</qwidget*,>
shun-iwasawa 8fb291
  QMap<preferencesitemid, oneditedpopupfunc=""> m_onEditedFuncMap;</preferencesitemid,>
shun-iwasawa 8fb291
  QMap<preferencesitemid, oneditedpopupfunc=""> m_preEditedFuncMap;</preferencesitemid,>
Toshihiro Shimizu 890ddd
shun-iwasawa 8fb291
public:
shun-iwasawa 8fb291
  PreferencesPopup();
Toshihiro Shimizu 890ddd
shun-iwasawa 8fb291
private:
shun-iwasawa 8fb291
  class FormatProperties;
shun-iwasawa c54dfb
  class AdditionalStyleEdit;
shun-iwasawa 215a5b
  class Display30bitChecker;
turtletooth 04d8fd
shun-iwasawa 8fb291
private:
shun-iwasawa 8fb291
  Preferences* m_pref;
shun-iwasawa 8fb291
  FormatProperties* m_formatProperties;
shun-iwasawa c54dfb
  AdditionalStyleEdit* m_additionalStyleEdit;
Jeremy Bullock 33e7d1
shun-iwasawa 8fb291
  DVGui::CheckBox *m_projectRootDocuments, *m_projectRootDesktop,
shun-iwasawa 8fb291
      *m_projectRootCustom;
shun-iwasawa 8fb291
  QPushButton* m_editLevelFormat;
shun-iwasawa 8fb291
  QComboBox* m_levelFormatNames;
manongjohn a21b06
Toshihiro Shimizu 890ddd
private:
Shinya Kitaoka 120a6e
  void rebuildFormatsList();
shun-iwasawa 8fb291
  QList<comboboxitem> buildFontStyleList() const;</comboboxitem>
shun-iwasawa 8fb291
shun-iwasawa 8fb291
  QWidget* createUI(
shun-iwasawa 8fb291
      PreferencesItemId id,
shun-iwasawa 8fb291
      const QList<comboboxitem>& comboItems = QList<comboboxitem>());</comboboxitem></comboboxitem>
shun-iwasawa 8fb291
  QGridLayout* insertGroupBoxUI(PreferencesItemId id, QGridLayout* layout);
shun-iwasawa 8fb291
  void insertUI(PreferencesItemId id, QGridLayout* layout,
shun-iwasawa 8fb291
                const QList<comboboxitem>& comboItems = QList<comboboxitem>());</comboboxitem></comboboxitem>
shun-iwasawa 8fb291
  void insertDualUIs(
shun-iwasawa 8fb291
      PreferencesItemId leftId, PreferencesItemId rightId, QGridLayout* layout,
shun-iwasawa 8fb291
      const QList<comboboxitem>& leftComboItems  = QList<comboboxitem>(),</comboboxitem></comboboxitem>
shun-iwasawa 8fb291
      const QList<comboboxitem>& rightComboItems = QList<comboboxitem>());</comboboxitem></comboboxitem>
shun-iwasawa 8fb291
  void insertFootNote(QGridLayout* layout);
shun-iwasawa 8fb291
  QString getUIString(PreferencesItemId id);
shun-iwasawa 8fb291
  QList<comboboxitem> getComboItemList(PreferencesItemId id) const;</comboboxitem>
shun-iwasawa 8fb291
  template <typename t=""></typename>
shun-iwasawa 8fb291
  inline T getUI(PreferencesItemId id);
shun-iwasawa 8fb291
shun-iwasawa 8fb291
  QWidget* createGeneralPage();
shun-iwasawa 8fb291
  QWidget* createInterfacePage();
shun-iwasawa 8fb291
  QWidget* createVisualizationPage();
shun-iwasawa 8fb291
  QWidget* createLoadingPage();
shun-iwasawa 8fb291
  QWidget* createSavingPage();
shun-iwasawa 8fb291
  QWidget* createImportExportPage();
justburner 08eb1b
  QWidget* createAutoLipSyncPage();
shun-iwasawa 8fb291
  QWidget* createDrawingPage();
shun-iwasawa 8fb291
  QWidget* createToolsPage();
shun-iwasawa 8fb291
  QWidget* createXsheetPage();
shun-iwasawa 8fb291
  QWidget* createAnimationPage();
shun-iwasawa 8fb291
  QWidget* createPreviewPage();
shun-iwasawa 8fb291
  QWidget* createOnionSkinPage();
shun-iwasawa 8fb291
  QWidget* createColorsPage();
shun-iwasawa 8fb291
  QWidget* createVersionControlPage();
shun-iwasawa 8fb291
  QWidget* createTouchTabletPage();
shun-iwasawa 8fb291
shun-iwasawa 8fb291
  //--- callbacks ---
shun-iwasawa 8fb291
  // General
shun-iwasawa 8fb291
  void onAutoSaveChanged();
shun-iwasawa 8fb291
  void onAutoSaveOptionsChanged();
shun-iwasawa 8fb291
  void onWatchFileSystemClicked();
shun-iwasawa 8fb291
  void onPathAliasPriorityChanged();
shun-iwasawa 8fb291
  // Interface
shun-iwasawa 8fb291
  void onStyleSheetTypeChanged();
Kite 521c84
  void onIconThemeChanged();
shun-iwasawa 8fb291
  void onPixelsOnlyChanged();
shun-iwasawa 8fb291
  void onUnitChanged();
shun-iwasawa 8fb291
  void beforeRoomChoiceChanged();
shun-iwasawa a8f111
  void onColorCalibrationChanged();
shun-iwasawa 8fb291
  // Drawing
shun-iwasawa 8fb291
  void onDefLevelTypeChanged();
shun-iwasawa 8fb291
  void onUseNumpadForSwitchingStylesClicked();
shun-iwasawa 8fb291
  // Tools
shun-iwasawa 8fb291
  void onLevelBasedToolsDisplayChanged();
shun-iwasawa 8fb291
  // Xsheet
shun-iwasawa 8fb291
  void onShowKeyframesOnCellAreaChanged();
shun-iwasawa 8fb291
  void onShowXSheetToolbarClicked();
shun-iwasawa 4a3868
  // Animation
shun-iwasawa 4a3868
  void onModifyExpressionOnMovingReferencesChanged();
shun-iwasawa 8fb291
  // Preview
shun-iwasawa 8fb291
  void onBlankCountChanged();
shun-iwasawa 8fb291
  void onBlankColorChanged();
shun-iwasawa 8fb291
  // Onion Skin
shun-iwasawa 8fb291
  void onOnionSkinVisibilityChanged();
shun-iwasawa 8fb291
  void onOnionColorChanged();
shun-iwasawa 8fb291
  // Colors
shun-iwasawa 8fb291
  void onTranspCheckDataChanged();
justburner a13da2
  void onChessboardChanged();
shun-iwasawa 8fb291
  // Version Control
shun-iwasawa 8fb291
  void onSVNEnabledChanged();
shun-iwasawa 8fb291
  // Commonly used
shun-iwasawa 8fb291
  void notifySceneChanged();
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
private slots:
shun-iwasawa 8fb291
  void onChange();
shun-iwasawa 8fb291
  void onColorFieldChanged(const TPixel32&, bool);
Toshihiro Shimizu 890ddd
Jeremy Bullock 4c6224
  void onAutoSaveExternallyChanged();
Jeremy Bullock 4c6224
  void onAutoSavePeriodExternallyChanged();
shun-iwasawa 8fb291
  void onProjectRootChanged();
shun-iwasawa c54dfb
shun-iwasawa c54dfb
  void onEditAdditionalStyleSheet();
shun-iwasawa c54dfb
  void onAdditionalStyleSheetEdited();
shun-iwasawa 8fb291
  void onPixelUnitExternallySelected(bool on);
shun-iwasawa 8fb291
  void onInterfaceFontChanged(const QString& text);
shun-iwasawa 8fb291
  void onLutPathChanged();
shun-iwasawa 215a5b
  void onCheck30bitDisplay();
shun-iwasawa 8fb291
Shinya Kitaoka 120a6e
  void onAddLevelFormat();
Shinya Kitaoka 120a6e
  void onRemoveLevelFormat();
Shinya Kitaoka 120a6e
  void onEditLevelFormat();
Shinya Kitaoka 120a6e
  void onLevelFormatEdited();
Jeremy Bullock b53dba
  void onImportPolicyExternallyChanged(int policy);
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//**********************************************************************************
Toshihiro Shimizu 890ddd
//    PreferencesPopup::FormatProperties  definition
Toshihiro Shimizu 890ddd
//**********************************************************************************
Toshihiro Shimizu 890ddd
Shinya Kitaoka d1f6c4
class PreferencesPopup::FormatProperties final : public DVGui::Dialog {
Shinya Kitaoka 120a6e
  Q_OBJECT
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
public:
shun-iwasawa 8fb291
  FormatProperties(PreferencesPopup* parent);
Toshihiro Shimizu 890ddd
shun-iwasawa 8fb291
  void setLevelFormat(const Preferences::LevelFormat& lf);
Shinya Kitaoka 120a6e
  Preferences::LevelFormat levelFormat() const;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
private:
shun-iwasawa 8fb291
  QComboBox* m_dpiPolicy;
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  DVGui::LineEdit *m_name, *m_regExp;
Toshihiro Shimizu 890ddd
shun-iwasawa 481b59
  DVGui::DoubleLineEdit *m_dpi, *m_colorSpaceGamma;
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  DVGui::IntLineEdit *m_priority, *m_subsampling, *m_antialias;
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  DVGui::CheckBox *m_premultiply, *m_whiteTransp, *m_doAntialias;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
private slots:
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  void updateEnabledStatus();
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
shun-iwasawa c54dfb
//**********************************************************************************
shun-iwasawa c54dfb
//   PreferencesPopup::AdditionalStyleEdit  definition
shun-iwasawa c54dfb
//**********************************************************************************
shun-iwasawa c54dfb
shun-iwasawa c54dfb
class PreferencesPopup::AdditionalStyleEdit final : public DVGui::Dialog {
shun-iwasawa c54dfb
  Q_OBJECT
shun-iwasawa c54dfb
shun-iwasawa c54dfb
public:
shun-iwasawa c54dfb
  AdditionalStyleEdit(PreferencesPopup* parent);
shun-iwasawa c54dfb
shun-iwasawa c54dfb
private:
shun-iwasawa c54dfb
  QTextEdit* m_edit;
shun-iwasawa c54dfb
shun-iwasawa c54dfb
protected:
shun-iwasawa c54dfb
  void showEvent(QShowEvent* e) override;
shun-iwasawa c54dfb
shun-iwasawa c54dfb
private slots:
shun-iwasawa c54dfb
  void onOK();
shun-iwasawa c54dfb
  void onApply();
shun-iwasawa c54dfb
signals:
shun-iwasawa c54dfb
  void additionalSheetEdited();
shun-iwasawa c54dfb
};
shun-iwasawa c54dfb
shun-iwasawa 215a5b
//**********************************************************************************
shun-iwasawa 215a5b
//   PreferencesPopup::Display30bitCheckerView  definition
shun-iwasawa 215a5b
//**********************************************************************************
shun-iwasawa 215a5b
shun-iwasawa 215a5b
class PreferencesPopup::Display30bitChecker final : public QDialog {
shun-iwasawa 215a5b
  Q_OBJECT
shun-iwasawa 215a5b
shun-iwasawa 215a5b
  QSurfaceFormat m_currentDefaultFormat;
shun-iwasawa 215a5b
shun-iwasawa 215a5b
private:
shun-iwasawa 215a5b
  class GLView;
shun-iwasawa 215a5b
shun-iwasawa 215a5b
public:
shun-iwasawa 215a5b
  Display30bitChecker(PreferencesPopup* parent);
shun-iwasawa 215a5b
  ~Display30bitChecker();
shun-iwasawa 215a5b
};
shun-iwasawa 215a5b
shun-iwasawa 215a5b
class PreferencesPopup::Display30bitChecker::GLView final
shun-iwasawa 215a5b
    : public QOpenGLWidget,
shun-iwasawa 215a5b
      protected QOpenGLFunctions {
shun-iwasawa 215a5b
  Q_OBJECT
shun-iwasawa 215a5b
  bool m_is30bit;
shun-iwasawa 215a5b
shun-iwasawa 215a5b
public:
shun-iwasawa 215a5b
  GLView(QWidget* parent, bool is30bit);
shun-iwasawa 215a5b
shun-iwasawa 215a5b
protected:
shun-iwasawa 215a5b
  void initializeGL() override;
shun-iwasawa 215a5b
  void resizeGL(int width, int height) override;
shun-iwasawa 215a5b
  void paintGL() override;
shun-iwasawa 215a5b
};
shun-iwasawa 215a5b
Shinya Kitaoka 120a6e
#endif  // PREFERENCESPOPUP_H