Shinya Kitaoka 810553
#pragma once
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#ifndef FLICONSOLE_H
Toshihiro Shimizu 890ddd
#define FLICONSOLE_H
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#include <qwidget></qwidget>
Toshihiro Shimizu 890ddd
#include <qaction></qaction>
Toshihiro Shimizu 890ddd
#include <qmap></qmap>
Toshihiro Shimizu 890ddd
#include <qlist></qlist>
Toshihiro Shimizu 890ddd
#include <qtime></qtime>
Toshihiro Shimizu 890ddd
#include <qstyleoption></qstyleoption>
Toshihiro Shimizu 890ddd
#include <qstyleoptionframev3></qstyleoptionframev3>
Toshihiro Shimizu 890ddd
#include <qcolor></qcolor>
Toshihiro Shimizu 890ddd
#include <qimage></qimage>
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#include "tcommon.h"
Toshihiro Shimizu 890ddd
#include "tpixel.h"
Toshihiro Shimizu 890ddd
#include "toonzqt/intfield.h"
Toshihiro Shimizu 890ddd
#include "toonz/imagepainter.h"
Toshihiro Shimizu 890ddd
#include "tstopwatch.h"
Toshihiro Shimizu 890ddd
#include <qthread></qthread>
shun-iwasawa fe0983
#include <qelapsedtimer></qelapsedtimer>
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#undef DVAPI
Toshihiro Shimizu 890ddd
#undef DVVAR
Toshihiro Shimizu 890ddd
#ifdef TOONZQT_EXPORTS
Toshihiro Shimizu 890ddd
#define DVAPI DV_EXPORT_API
Toshihiro Shimizu 890ddd
#define DVVAR DV_EXPORT_VAR
Toshihiro Shimizu 890ddd
#else
Toshihiro Shimizu 890ddd
#define DVAPI DV_IMPORT_API
Toshihiro Shimizu 890ddd
#define DVVAR DV_IMPORT_VAR
Toshihiro Shimizu 890ddd
#endif
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
class QToolBar;
Toshihiro Shimizu 890ddd
class QLabel;
Toshihiro Shimizu 890ddd
class QSlider;
Toshihiro Shimizu 890ddd
class QTimerEvent;
Toshihiro Shimizu 890ddd
class QVBoxLayout;
Toshihiro Shimizu 890ddd
class QActionGroup;
Toshihiro Shimizu 890ddd
class QAbstractButton;
Toshihiro Shimizu 890ddd
class QPushButton;
Toshihiro Shimizu 890ddd
class QScrollBar;
Toshihiro Shimizu 890ddd
class DoubleButton;
Toshihiro Shimizu 890ddd
class FlipSlider;
Toshihiro Shimizu 890ddd
class FlipConsole;
Toshihiro Shimizu 890ddd
class ToolBarContainer;
Toshihiro Shimizu 890ddd
class FlipConsoleOwner;
Toshihiro Shimizu 890ddd
class TFrameHandle;
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka d1f6c4
class PlaybackExecutor final : public QThread {
Shinya Kitaoka 120a6e
  Q_OBJECT
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  int m_fps;
Shinya Kitaoka 120a6e
  bool m_abort;
shun-iwasawa fe0983
  QElapsedTimer m_timer;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
public:
Shinya Kitaoka 120a6e
  PlaybackExecutor();
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  void resetFps(int fps);
Toshihiro Shimizu 890ddd
Shinya Kitaoka 473e70
  void run() override;
Shinya Kitaoka 120a6e
  void abort() { m_abort = true; }
shun-iwasawa fe0983
  bool isAborted() { return m_abort; }
shun-iwasawa fe0983
  void emitNextFrame(int fps) { emit nextFrame(fps, nullptr, 0); }
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
signals:
shun-iwasawa fe0983
  void nextFrame(
shun-iwasawa fe0983
      int fps, QElapsedTimer *timer,
shun-iwasawa fe0983
      qint64 targetInstant);  // Must be connect with
shun-iwasawa fe0983
                              // Qt::BlockingQueuedConnection connection type.
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
// Implements a flipbook slider with a progress bar in background.
Shinya Kitaoka d1f6c4
class FlipSlider final : public QAbstractSlider {
Shinya Kitaoka 120a6e
  Q_OBJECT
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  Q_PROPERTY(int PBHeight READ getPBHeight WRITE setPBHeight)
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  Q_PROPERTY(QImage PBOverlay READ getPBOverlay WRITE setPBOverlay)
Shinya Kitaoka 120a6e
  Q_PROPERTY(QImage PBMarker READ getPBMarker WRITE setPBMarker)
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  Q_PROPERTY(int PBColorMarginLeft READ getPBColorMarginLeft WRITE
Shinya Kitaoka 120a6e
                 setPBColorMarginLeft)
Shinya Kitaoka 120a6e
  Q_PROPERTY(
Shinya Kitaoka 120a6e
      int PBColorMarginTop READ getPBColorMarginTop WRITE setPBColorMarginTop)
Shinya Kitaoka 120a6e
  Q_PROPERTY(int PBColorMarginRight READ getPBColorMarginRight WRITE
Shinya Kitaoka 120a6e
                 setPBColorMarginRight)
Shinya Kitaoka 120a6e
  Q_PROPERTY(int PBColorMarginBottom READ getPBColorMarginBottom WRITE
Shinya Kitaoka 120a6e
                 setPBColorMarginBottom)
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  Q_PROPERTY(int PBMarkerMarginLeft READ getPBMarkerMarginLeft WRITE
Shinya Kitaoka 120a6e
                 setPBMarkerMarginLeft)
Shinya Kitaoka 120a6e
  Q_PROPERTY(int PBMarkerMarginRight READ getPBMarkerMarginRight WRITE
Shinya Kitaoka 120a6e
                 setPBMarkerMarginRight)
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  Q_PROPERTY(QColor baseColor READ getBaseColor WRITE setBaseColor)
Shinya Kitaoka 120a6e
  Q_PROPERTY(
Shinya Kitaoka 120a6e
      QColor notStartedColor READ getNotStartedColor WRITE setNotStartedColor)
Shinya Kitaoka 120a6e
  Q_PROPERTY(QColor startedColor READ getStartedColor WRITE setStartedColor)
Shinya Kitaoka 120a6e
  Q_PROPERTY(QColor finishedColor READ getFinishedColor WRITE setFinishedColor)
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  bool m_enabled;
Shinya Kitaoka 120a6e
  const std::vector<uchar> *m_progressBarStatus;</uchar>
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
public:
Shinya Kitaoka 120a6e
  enum { PBFrameNotStarted, PBFrameStarted, PBFrameFinished };
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  FlipSlider(QWidget *parent);
Shinya Kitaoka 120a6e
  ~FlipSlider() {}
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  void setProgressBarEnabled(bool enabled) { m_enabled = enabled; }
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  void setProgressBarStatus(const std::vector<uchar> *pbStatus) {</uchar>
Shinya Kitaoka 120a6e
    m_progressBarStatus = pbStatus;
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  const std::vector<uchar> *getProgressBarStatus() const {</uchar>
Shinya Kitaoka 120a6e
    return m_progressBarStatus;
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
public:
Shinya Kitaoka 120a6e
  // Properties setters-getters
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  int getPBHeight() const;
Shinya Kitaoka 120a6e
  void setPBHeight(int height);
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  QImage getPBOverlay() const;
Shinya Kitaoka 120a6e
  void setPBOverlay(const QImage &img);
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  QImage getPBMarker() const;
Shinya Kitaoka 120a6e
  void setPBMarker(const QImage &img);
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  int getPBColorMarginLeft() const;
Shinya Kitaoka 120a6e
  void setPBColorMarginLeft(int margin);
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  int getPBColorMarginTop() const;
Shinya Kitaoka 120a6e
  void setPBColorMarginTop(int margin);
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  int getPBColorMarginRight() const;
Shinya Kitaoka 120a6e
  void setPBColorMarginRight(int margin);
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  int getPBColorMarginBottom() const;
Shinya Kitaoka 120a6e
  void setPBColorMarginBottom(int margin);
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  int getPBMarkerMarginLeft() const;
Shinya Kitaoka 120a6e
  void setPBMarkerMarginLeft(int margin);
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  int getPBMarkerMarginRight() const;
Shinya Kitaoka 120a6e
  void setPBMarkerMarginRight(int margin);
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  QColor getBaseColor() const;
Shinya Kitaoka 120a6e
  void setBaseColor(const QColor &color);
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  QColor getNotStartedColor() const;
Shinya Kitaoka 120a6e
  void setNotStartedColor(const QColor &color);
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  QColor getStartedColor() const;
Shinya Kitaoka 120a6e
  void setStartedColor(const QColor &color);
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  QColor getFinishedColor() const;
Shinya Kitaoka 120a6e
  void setFinishedColor(const QColor &color);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
protected:
Shinya Kitaoka 473e70
  void paintEvent(QPaintEvent *ev) override;
Toshihiro Shimizu 890ddd
Shinya Kitaoka 473e70
  void mousePressEvent(QMouseEvent *me) override;
Shinya Kitaoka 473e70
  void mouseMoveEvent(QMouseEvent *me) override;
Shinya Kitaoka 473e70
  void mouseReleaseEvent(QMouseEvent *me) override;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
private:
Shinya Kitaoka 120a6e
  int sliderPositionFromValue(int min, int max, int pos, int span);
Shinya Kitaoka 120a6e
  int sliderValueFromPosition(int min, int max, int step, int pos, int span);
Shinya Kitaoka 120a6e
  int pageStepVal(int val);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
signals:
Shinya Kitaoka 120a6e
  void flipSliderReleased();
Shinya Kitaoka 120a6e
  void flipSliderPressed();
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka d1f6c4
class DVAPI FlipConsole final : public QWidget {
Shinya Kitaoka 120a6e
  Q_OBJECT
Toshihiro Shimizu 890ddd
Kite 521c84
  QColor m_fpsFieldColor;
Kite 521c84
  Q_PROPERTY(QColor FpsFieldColor READ getFpsFieldColor WRITE setFpsFieldColor)
Kite 521c84
Toshihiro Shimizu 890ddd
public:
Shinya Kitaoka 120a6e
  enum EGadget {
manongjohn 77dd6e
    eBegin,
manongjohn 77dd6e
    ePlay,
manongjohn 77dd6e
    eLoop,
manongjohn 77dd6e
    ePause,
manongjohn 77dd6e
    ePrev,
manongjohn 77dd6e
    eNext,
manongjohn 77dd6e
    eFirst,
manongjohn 77dd6e
    eLast,
manongjohn 77dd6e
    eRed,
manongjohn 77dd6e
    eGreen,
manongjohn 77dd6e
    eBlue,
manongjohn 77dd6e
    eGRed,
manongjohn 77dd6e
    eGGreen,
manongjohn 77dd6e
    eGBlue,
manongjohn 77dd6e
    eMatte,
manongjohn 77dd6e
    eFrames,
manongjohn 77dd6e
    eRate,
manongjohn 77dd6e
    eSound,
manongjohn 77dd6e
    eHisto,
manongjohn 77dd6e
    eSaveImg,
manongjohn 77dd6e
    eCompare,
manongjohn 77dd6e
    eCustomize,
manongjohn 77dd6e
    eSave,
manongjohn 77dd6e
    eDefineSubCamera,
manongjohn 77dd6e
    eFilledRaster,  // Used only in LineTest
manongjohn 77dd6e
    eDefineLoadBox,
manongjohn 77dd6e
    eUseLoadBox,
manongjohn 77dd6e
    eLocator,
manongjohn 77dd6e
    eZoomIn,
manongjohn 77dd6e
    eZoomOut,
manongjohn 77dd6e
    eFlipHorizontal,
manongjohn 77dd6e
    eFlipVertical,
manongjohn 77dd6e
    eResetView,
shun-iwasawa 813865
    eBlankFrames,
shun-iwasawa e12bfd
    // following values are hard-coded in ImagePainter
shun-iwasawa e12bfd
    eBlackBg = 0x40000,
shun-iwasawa e12bfd
    eWhiteBg = 0x80000,
shun-iwasawa e12bfd
    eCheckBg = 0x100000,
manongjohn 77dd6e
    eEnd
Shinya Kitaoka 120a6e
  };
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  static FlipConsole *m_currentConsole;
Shinya Kitaoka 120a6e
  static QList<flipconsole *=""> m_visibleConsoles;</flipconsole>
Shinya Kitaoka 120a6e
  static bool m_isLinkedPlaying;
Shinya Kitaoka 120a6e
  static bool m_areLinked;
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  // blanksEnabled==true->at begin of each loop a number of blank frames are
Shinya Kitaoka 120a6e
  // drawn (according to rpeferences settings)
manongjohn 77dd6e
  FlipConsole(QVBoxLayout *layout, std::vector<int> gadgetsMask,</int>
manongjohn 77dd6e
              bool isLinkable, QWidget *customWidget,
manongjohn 77dd6e
              const QString &customizeId,
Shinya Kitaoka 120a6e
              FlipConsoleOwner *consoleOwner,  // call
Shinya Kitaoka 120a6e
                                               // consoleOwner->onDrawFrame()
luz paz 6454c4
                                               // instead of emitting drawFrame
Shinya Kitaoka 120a6e
                                               // signal
Shinya Kitaoka 120a6e
              bool enableBlanks = false);
Shinya Kitaoka 120a6e
  void enableBlanks(bool state);
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  void setFrameRange(
Shinya Kitaoka 120a6e
      int from, int to, int step,
Shinya Kitaoka 120a6e
      int current = -1);  // if current==-1, current position will be ==from
Shinya Kitaoka 120a6e
  void getFrameRange(int &from, int &to, int &step) const {
Shinya Kitaoka 120a6e
    from = m_from, to = m_to, step = m_step;
Shinya Kitaoka 120a6e
  }
shun_iwasawa d77cdf
  void setFrameRate(int rate, bool forceUpdate = true);
Shinya Kitaoka 120a6e
  // if doShowHide==true, applies set visible, otherwise applies setEnabled
Shinya Kitaoka 120a6e
  void enableButton(UINT button, bool enable, bool doShowHide = true);
Shinya Kitaoka 120a6e
  void showCurrentFrame();
Shinya Kitaoka 120a6e
  int getCurrentFrame() const { return m_currentFrame; }
Jeremy Bullock b6833a
  int getCurrentFps() const { return m_fps; }
Shinya Kitaoka 120a6e
  void setChecked(UINT button, bool state);
Shinya Kitaoka 120a6e
  bool isChecked(UINT button) const;
Shinya Kitaoka 120a6e
  void setCurrentFrame(int frame, bool forceResetting = false);
Shinya Kitaoka 120a6e
  void setMarkers(int fromIndex, int toIndex) {
Shinya Kitaoka 120a6e
    m_markerFrom = fromIndex + 1;
Shinya Kitaoka 120a6e
    m_markerTo   = toIndex + 1;
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  void pressButton(UINT button) {
Shinya Kitaoka 120a6e
    doButtonPressed(button);
Shinya Kitaoka 120a6e
    setChecked(button, !isChecked(button));
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  // the main (currently the only) use for current flipconsole and setActive is
Shinya Kitaoka 120a6e
  // to
Shinya Kitaoka 120a6e
  // support shortcuts handling
Shinya Kitaoka 120a6e
  // setActive() should be called every time the visibility state of the console
Shinya Kitaoka 120a6e
  // changes
Shinya Kitaoka 120a6e
  // a list of visible console is maintained. calling setActive(false) for the
Shinya Kitaoka 120a6e
  // current
Shinya Kitaoka 120a6e
  // console makes automatically current the next one in the list
Shinya Kitaoka 120a6e
  static FlipConsole *getCurrent() { return m_currentConsole; };
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  static void toggleLinked();
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  void makeCurrent();
Shinya Kitaoka 120a6e
  void setActive(bool active);
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  void pressButton(EGadget buttonId);
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  void showHideAllParts(bool);
Jeremy Bullock 83d04e
  void showHidePlaybar(bool);
Jeremy Bullock 83d04e
  void showHideFrameSlider(bool);
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  void enableProgressBar(bool enable);
Shinya Kitaoka 120a6e
  void setProgressBarStatus(const std::vector<uchar> *status);</uchar>
Shinya Kitaoka 120a6e
  const std::vector<uchar> *getProgressBarStatus() const;</uchar>
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  void setFrameHandle(TFrameHandle *frameHandle) {
Shinya Kitaoka 120a6e
    m_frameHandle = frameHandle;
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  bool isLinkable() const { return m_isLinkable; }
shun-iwasawa fe0983
  void playNextFrame(QElapsedTimer *timer = nullptr, qint64 targetInstant = 0);
Shinya Kitaoka 120a6e
  void updateCurrentFPS(int val);
Toshihiro Shimizu 890ddd
manongjohn 77dd6e
  bool hasButton(std::vector<int> buttonMask, FlipConsole::EGadget buttonId) {</int>
manongjohn 77dd6e
    if (buttonMask.size() == 0) return true;
manongjohn 77dd6e
    return std::find(buttonMask.begin(), buttonMask.end(), buttonId) ==
manongjohn 77dd6e
           buttonMask.end();
manongjohn 77dd6e
  }
manongjohn 77dd6e
Kite 521c84
  void setFpsFieldColor(const QColor &color) { m_fpsFieldColor = color; }
Kite 521c84
  QColor getFpsFieldColor() const { return m_fpsFieldColor; }
Kite 521c84
Toshihiro Shimizu 890ddd
signals:
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  void buttonPressed(FlipConsole::EGadget button);
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  void playStateChanged(bool isPlaying);
Shinya Kitaoka 120a6e
  void sliderReleased();
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
private:
Shinya Kitaoka 120a6e
  UINT m_customizeMask;
Shinya Kitaoka 120a6e
  QString m_customizeId;
Shinya Kitaoka 120a6e
  QAction *m_customAction;
Shinya Kitaoka 120a6e
  PlaybackExecutor m_playbackExecutor;
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  QAction *m_customSep, *m_rateSep, *m_histoSep, *m_bgSep, *m_vcrSep,
Shinya Kitaoka 120a6e
      *m_compareSep, *m_saveSep, *m_colorFilterSep, *m_soundSep, *m_subcamSep,
manongjohn 77dd6e
      *m_filledRasterSep, *m_viewerSep;
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  QToolBar *m_playToolBar;
Shinya Kitaoka 120a6e
  QActionGroup *m_colorFilterGroup;
Shinya Kitaoka 120a6e
  ToolBarContainer *m_playToolBarContainer;
Shinya Kitaoka 120a6e
  QFrame *m_frameSliderFrame;
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  QLabel *m_fpsLabel;
Shinya Kitaoka 120a6e
  QScrollBar *m_fpsSlider;
Shinya Kitaoka 120a6e
  DVGui::IntLineEdit *m_fpsField;
Shinya Kitaoka 120a6e
  QAction *m_fpsFieldAction;
Shinya Kitaoka 120a6e
  QAction *m_fpsLabelAction;
Shinya Kitaoka 120a6e
  QAction *m_fpsSliderAction;
Shinya Kitaoka 120a6e
  QFrame *createFpsSlider();
Shinya Kitaoka 120a6e
  QAction *m_doubleRedAction, *m_doubleGreenAction, *m_doubleBlueAction;
Shinya Kitaoka 120a6e
  DoubleButton *m_doubleRed, *m_doubleGreen, *m_doubleBlue;
manongjohn 77dd6e
  std::vector<int> m_gadgetsMask;</int>
Shinya Kitaoka 120a6e
  int m_from, m_to, m_step;
Shinya Kitaoka 120a6e
  int m_currentFrame, m_framesCount;
Shinya Kitaoka 120a6e
  ImagePainter::VisualSettings m_settings;
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  bool m_isPlay;
shun_iwasawa d77cdf
  int m_fps, m_sceneFps;
Shinya Kitaoka 120a6e
  bool m_reverse;
Shinya Kitaoka 120a6e
  int m_markerFrom, m_markerTo;
Shinya Kitaoka 120a6e
  bool m_drawBlanksEnabled;
Shinya Kitaoka 120a6e
  int m_blanksCount;
Shinya Kitaoka 120a6e
  TPixel m_blankColor;
Shinya Kitaoka 120a6e
  int m_blanksToDraw;
Shinya Kitaoka 120a6e
  bool m_isLinkable;
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  QMap<egadget, *="" qabstractbutton=""> m_buttons;</egadget,>
Shinya Kitaoka 120a6e
  QMap<egadget, *="" qaction=""> m_actions;</egadget,>
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  void createCustomizeMenu(bool withCustomWidget);
Shinya Kitaoka 120a6e
  void addMenuItem(UINT id, const QString &text, QMenu *menu);
Shinya Kitaoka 120a6e
  void createButton(UINT buttonMask, const char *iconStr, const QString &tip,
Shinya Kitaoka 120a6e
                    bool checkable, QActionGroup *groupIt = 0);
Shinya Kitaoka 120a6e
  QAction *createCheckedButtonWithBorderImage(
Shinya Kitaoka 120a6e
      UINT buttonMask, const char *iconStr, const QString &tip, bool checkable,
Shinya Kitaoka 120a6e
      QActionGroup *groupIt = 0, const char *cmdId = 0);
Shinya Kitaoka 120a6e
  void createOnOffButton(UINT buttonMask, const char *iconStr,
Shinya Kitaoka 120a6e
                         const QString &tip, QActionGroup *group);
Shinya Kitaoka 120a6e
  QAction *createDoubleButton(UINT buttonMask1, UINT buttonMask2,
Shinya Kitaoka 120a6e
                              const char *iconStr1, const char *iconStr2,
Shinya Kitaoka 120a6e
                              const QString &tip1, const QString &tip2,
Shinya Kitaoka 120a6e
                              QActionGroup *group, DoubleButton *&w);
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  QFrame *createFrameSlider();
manongjohn 77dd6e
  void createPlayToolBar(QWidget *customWidget);
Shinya Kitaoka 120a6e
  DVGui::IntLineEdit *m_editCurrFrame;
Shinya Kitaoka 120a6e
  FlipSlider *m_currFrameSlider;
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  void doButtonPressed(UINT button);
Shinya Kitaoka 120a6e
  static void pressLinkedConsoleButton(UINT button, FlipConsole *skipIt);
Shinya Kitaoka 120a6e
  void applyCustomizeMask();
Shinya Kitaoka 120a6e
  void onLoadBox(bool isDefine);
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  QPushButton *m_enableBlankFrameButton;
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  FlipConsoleOwner *m_consoleOwner;
Shinya Kitaoka 120a6e
  TFrameHandle *m_frameHandle;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
protected slots:
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  void OnSetCurrentFrame();
Shinya Kitaoka 120a6e
  void OnFrameSliderRelease();
Shinya Kitaoka 120a6e
  void OnFrameSliderPress();
Shinya Kitaoka 120a6e
  void OnSetCurrentFrame(int);
Shinya Kitaoka 120a6e
  void setCurrentFPS(int);
Shinya Kitaoka 120a6e
  void setCurrentFPS(bool dragging);
Shinya Kitaoka 120a6e
  inline void onButtonPressed(QAction *action) {
Shinya Kitaoka 120a6e
    onButtonPressed(action->data().toUInt());
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  void onButtonPressed(int button);
Shinya Kitaoka 120a6e
  void incrementCurrentFrame(int delta);
shun-iwasawa fe0983
  void onNextFrame(int fps, QElapsedTimer *timer, qint64 target);
Shinya Kitaoka 120a6e
  void onCustomizeButtonPressed(QAction *);
shun-iwasawa fe0983
  bool drawBlanks(int from, int to, QElapsedTimer *timer, qint64 target);
Shinya Kitaoka 120a6e
  void onSliderRelease();
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  void onFPSEdited();
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
public slots:
shun_iwasawa 1f4a70
  void onPreferenceChanged(const QString &);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
private:
Shinya Kitaoka 120a6e
  friend class PlaybackExecutor;
Shinya Kitaoka 120a6e
  PlaybackExecutor &playbackExecutor() { return m_playbackExecutor; }
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#endif