|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#include "toonzqt/flipconsole.h"
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
// TnzQt includes
|
|
Toshihiro Shimizu |
890ddd |
#include "toonzqt/menubarcommand.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "toonzqt/dvscrollwidget.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "toonzqt/gutil.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "toonzqt/flipconsoleowner.h"
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
// TnzLib includes
|
|
Toshihiro Shimizu |
890ddd |
#include "toonz/preferences.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "toonz/tframehandle.h"
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
// TnzBase includes
|
|
Toshihiro Shimizu |
890ddd |
#include "tenv.h"
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
// TnzCore includes
|
|
Toshihiro Shimizu |
890ddd |
#include "tconvert.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "timagecache.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "trop.h"
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#include "../toonz/tapp.h"
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
// Qt includes
|
|
Toshihiro Shimizu |
890ddd |
#include <qvboxlayout></qvboxlayout>
|
|
Toshihiro Shimizu |
890ddd |
#include <qhboxlayout></qhboxlayout>
|
|
Toshihiro Shimizu |
890ddd |
#include <qtoolbar></qtoolbar>
|
|
Toshihiro Shimizu |
890ddd |
#include <qlabel></qlabel>
|
|
Toshihiro Shimizu |
890ddd |
#include <qframe></qframe>
|
|
Toshihiro Shimizu |
890ddd |
#include <qslider></qslider>
|
|
Toshihiro Shimizu |
890ddd |
#include <qtimerevent></qtimerevent>
|
|
Toshihiro Shimizu |
890ddd |
#include <qtoolbutton></qtoolbutton>
|
|
Toshihiro Shimizu |
890ddd |
#include <qpainter></qpainter>
|
|
Toshihiro Shimizu |
890ddd |
#include <qmouseevent></qmouseevent>
|
|
Toshihiro Shimizu |
890ddd |
#include <qicon></qicon>
|
|
Toshihiro Shimizu |
890ddd |
#include <qaction></qaction>
|
|
Toshihiro Shimizu |
890ddd |
#include <qwidgetaction></qwidgetaction>
|
|
Toshihiro Shimizu |
890ddd |
#include <qstyle></qstyle>
|
|
Toshihiro Shimizu |
890ddd |
#include <qstylepainter></qstylepainter>
|
|
Toshihiro Shimizu |
890ddd |
#include <qstyleoption></qstyleoption>
|
|
Toshihiro Shimizu |
890ddd |
#include <qstyleoptionframev3></qstyleoptionframev3>
|
|
Toshihiro Shimizu |
890ddd |
#include <qsettings></qsettings>
|
|
Toshihiro Shimizu |
890ddd |
#include <qpushbutton></qpushbutton>
|
|
Toshihiro Shimizu |
890ddd |
#include <qscrollbar></qscrollbar>
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
using namespace DVGui;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//==========================================================================================
|
|
Toshihiro Shimizu |
890ddd |
// Preliminary stuff - local namespace
|
|
Toshihiro Shimizu |
890ddd |
//==========================================================================================
|
|
Toshihiro Shimizu |
890ddd |
TEnv::IntVar FlipBookWhiteBgToggle("FlipBookWhiteBgToggle", 1);
|
|
Toshihiro Shimizu |
890ddd |
TEnv::IntVar FlipBookBlackBgToggle("FlipBookBlackBgToggle", 0);
|
|
Toshihiro Shimizu |
890ddd |
TEnv::IntVar FlipBookCheckBgToggle("FlipBookCheckBgToggle", 0);
|
|
Toshihiro Shimizu |
890ddd |
namespace
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
//Please refer to the "qss/standard/standard.qss" file for explanations of the following properties.
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
int PBHeight;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
QImage PBOverlay;
|
|
Toshihiro Shimizu |
890ddd |
QImage PBMarker;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
int PBColorMarginLeft = 0;
|
|
Toshihiro Shimizu |
890ddd |
int PBColorMarginTop = 0;
|
|
Toshihiro Shimizu |
890ddd |
int PBColorMarginRight = 0;
|
|
Toshihiro Shimizu |
890ddd |
int PBColorMarginBottom = 0;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
int PBMarkerMarginLeft = 0;
|
|
Toshihiro Shimizu |
890ddd |
int PBMarkerMarginRight = 0;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
QColor PBBaseColor = QColor(235, 235, 235);
|
|
Toshihiro Shimizu |
890ddd |
QColor PBNotStartedColor = QColor(210, 40, 40);
|
|
Toshihiro Shimizu |
890ddd |
QColor PBStartedColor = QColor(220, 160, 160);
|
|
Toshihiro Shimizu |
890ddd |
QColor PBFinishedColor = QColor(235, 235, 235);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
int FlipSlider::getPBHeight() const { return PBHeight; }
|
|
Toshihiro Shimizu |
890ddd |
void FlipSlider::setPBHeight(int height)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
setFixedHeight(height);
|
|
Toshihiro Shimizu |
890ddd |
PBHeight = height;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
QImage FlipSlider::getPBOverlay() const { return PBOverlay; }
|
|
Toshihiro Shimizu |
890ddd |
void FlipSlider::setPBOverlay(const QImage &img) { PBOverlay = img; }
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
QImage FlipSlider::getPBMarker() const { return PBMarker; }
|
|
Toshihiro Shimizu |
890ddd |
void FlipSlider::setPBMarker(const QImage &img) { PBMarker = img; }
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
int FlipSlider::getPBColorMarginLeft() const { return PBColorMarginLeft; }
|
|
Toshihiro Shimizu |
890ddd |
void FlipSlider::setPBColorMarginLeft(int margin) { PBColorMarginLeft = margin; }
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
int FlipSlider::getPBColorMarginTop() const { return PBColorMarginTop; }
|
|
Toshihiro Shimizu |
890ddd |
void FlipSlider::setPBColorMarginTop(int margin) { PBColorMarginTop = margin; }
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
int FlipSlider::getPBColorMarginRight() const { return PBColorMarginRight; }
|
|
Toshihiro Shimizu |
890ddd |
void FlipSlider::setPBColorMarginRight(int margin) { PBColorMarginRight = margin; }
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
int FlipSlider::getPBColorMarginBottom() const { return PBColorMarginBottom; }
|
|
Toshihiro Shimizu |
890ddd |
void FlipSlider::setPBColorMarginBottom(int margin) { PBColorMarginBottom = margin; }
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
int FlipSlider::getPBMarkerMarginLeft() const { return PBMarkerMarginLeft; }
|
|
Toshihiro Shimizu |
890ddd |
void FlipSlider::setPBMarkerMarginLeft(int margin) { PBMarkerMarginLeft = margin; }
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
int FlipSlider::getPBMarkerMarginRight() const { return PBMarkerMarginRight; }
|
|
Toshihiro Shimizu |
890ddd |
void FlipSlider::setPBMarkerMarginRight(int margin) { PBMarkerMarginRight = margin; }
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
QColor FlipSlider::getBaseColor() const { return PBBaseColor; }
|
|
Toshihiro Shimizu |
890ddd |
void FlipSlider::setBaseColor(const QColor &color) { PBBaseColor = color; }
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
QColor FlipSlider::getNotStartedColor() const { return PBNotStartedColor; }
|
|
Toshihiro Shimizu |
890ddd |
void FlipSlider::setNotStartedColor(const QColor &color) { PBNotStartedColor = color; }
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
QColor FlipSlider::getStartedColor() const { return PBStartedColor; }
|
|
Toshihiro Shimizu |
890ddd |
void FlipSlider::setStartedColor(const QColor &color) { PBStartedColor = color; }
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
QColor FlipSlider::getFinishedColor() const { return PBFinishedColor; }
|
|
Toshihiro Shimizu |
890ddd |
void FlipSlider::setFinishedColor(const QColor &color) { PBFinishedColor = color; }
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
FlipConsole *FlipConsole::m_currentConsole = 0;
|
|
Toshihiro Shimizu |
890ddd |
QList<flipconsole *=""> FlipConsole::m_visibleConsoles;</flipconsole>
|
|
Toshihiro Shimizu |
890ddd |
bool FlipConsole::m_isLinkedPlaying = false;
|
|
Toshihiro Shimizu |
890ddd |
bool FlipConsole::m_areLinked = false;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//==========================================================================================
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
PlaybackExecutor::PlaybackExecutor()
|
|
Toshihiro Shimizu |
890ddd |
: m_fps(25), m_abort(false)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
void PlaybackExecutor::resetFps(int fps)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
m_fps = fps;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
void PlaybackExecutor::run()
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
// (Daniele)
|
|
Toshihiro Shimizu |
890ddd |
// We'll build the fps considering an interval of roughly 1 second (the last one).
|
|
Toshihiro Shimizu |
890ddd |
// However, the fps should be sampled at a faster rate. Each sample is taken at
|
|
Toshihiro Shimizu |
890ddd |
// 1/4 second, and the last 4 samples data are stored to keep trace of the last
|
|
Toshihiro Shimizu |
890ddd |
// second of playback.
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
TStopWatch timer;
|
|
Toshihiro Shimizu |
890ddd |
timer.start();
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
TUINT32 timeResolution = 250; // Use a sufficient sampling resolution (currently 1/4 sec).
|
|
Toshihiro Shimizu |
890ddd |
// Fps calculation is made once per sample.
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
int fps = m_fps, currSample = 0;
|
|
Toshihiro Shimizu |
890ddd |
TUINT32 playedFramesCount = 0;
|
|
Toshihiro Shimizu |
890ddd |
TUINT32 loadedInstant, nextSampleInstant = timeResolution;
|
|
Toshihiro Shimizu |
890ddd |
TUINT32 sampleTotalLoadingTime = 0;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
TUINT32 lastFrameCounts[4] = {0, 0, 0, 0}; // Keep the last 4 'played frames' counts.
|
|
Toshihiro Shimizu |
890ddd |
TUINT32 lastSampleInstants[4] = {0, 0, 0, 0}; // Same for the last sampling instants
|
|
Toshihiro Shimizu |
890ddd |
TUINT32 lastLoadingTimes[4] = {0, 0, 0, 0}; // Same for total sample loading times
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
double targetFrameTime = 1000.0 / abs(m_fps); // User-required time between frames
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
TUINT32 emissionInstant = 0; // Effective instant in which loading is invoked
|
|
Toshihiro Shimizu |
890ddd |
double emissionInstantD = 0.0; // Double precision version of the above
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
double lastLoadingTime = 0.0; // Mean frame loading time in the last sample
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
while (!m_abort) {
|
|
Toshihiro Shimizu |
890ddd |
emissionInstant = timer.getTotalTime();
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
// Draw the next frame
|
|
Toshihiro Shimizu |
890ddd |
emit nextFrame(fps); // Show the next frame, telling
|
|
Toshihiro Shimizu |
890ddd |
// currently measured fps
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
if (FlipConsole::m_areLinked) {
|
|
Toshihiro Shimizu |
890ddd |
// In case there are linked consoles, update them too.
|
|
Toshihiro Shimizu |
890ddd |
// Their load time must be included in the fps calculation.
|
|
Toshihiro Shimizu |
890ddd |
int i, consolesCount = FlipConsole::m_visibleConsoles.size();
|
|
Toshihiro Shimizu |
890ddd |
for (i = 0; i < consolesCount; ++i) {
|
|
Toshihiro Shimizu |
890ddd |
FlipConsole *console = FlipConsole::m_visibleConsoles.at(i);
|
|
Toshihiro Shimizu |
890ddd |
if (console->isLinkable() && console != FlipConsole::m_currentConsole)
|
|
Toshihiro Shimizu |
890ddd |
console->playbackExecutor().emitNextFrame(m_fps < 0 ? -fps : fps);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-------- Each nextFrame() blocks until the frame has been shown ---------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
++playedFramesCount;
|
|
Toshihiro Shimizu |
890ddd |
loadedInstant = timer.getTotalTime();
|
|
Toshihiro Shimizu |
890ddd |
sampleTotalLoadingTime += (loadedInstant - emissionInstant);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
// Recalculate data only after the specified time resolution has passed.
|
|
Toshihiro Shimizu |
890ddd |
if (loadedInstant > nextSampleInstant) {
|
|
Toshihiro Shimizu |
890ddd |
// Sampling instant. Perform calculations.
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
// Store values
|
|
Toshihiro Shimizu |
890ddd |
TUINT32 framesCount = playedFramesCount - lastFrameCounts[currSample];
|
|
Toshihiro Shimizu |
890ddd |
TUINT32 elapsedTime = loadedInstant - lastSampleInstants[currSample];
|
|
Toshihiro Shimizu |
890ddd |
double loadingTime = (sampleTotalLoadingTime - lastLoadingTimes[currSample]) / (double)framesCount;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
lastFrameCounts[currSample] = playedFramesCount;
|
|
Toshihiro Shimizu |
890ddd |
lastSampleInstants[currSample] = loadedInstant;
|
|
Toshihiro Shimizu |
890ddd |
lastLoadingTimes[currSample] = sampleTotalLoadingTime;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
currSample = (currSample + 1) % 4;
|
|
Toshihiro Shimizu |
890ddd |
nextSampleInstant = loadedInstant + timeResolution;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
// Rebuild current fps
|
|
Toshihiro Shimizu |
890ddd |
fps = troundp((1000 * framesCount) / (double)elapsedTime);
|
|
Toshihiro Shimizu |
890ddd |
targetFrameTime = 1000.0 / abs(m_fps); // m_fps could have changed...
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
// In case the playback is too slow to keep the required pace, reset the emission timeline.
|
|
Toshihiro Shimizu |
890ddd |
// Otherwise, it should be kept as the difference needs to be compensated to get the required fps.
|
|
Toshihiro Shimizu |
890ddd |
if ((int)emissionInstant - (int)emissionInstantD > 20) // Reset beyond, say, 20 msecs tolerance.
|
|
Toshihiro Shimizu |
890ddd |
emissionInstantD = (double)loadedInstant - loadingTime;
|
|
Toshihiro Shimizu |
890ddd |
else
|
|
Toshihiro Shimizu |
890ddd |
emissionInstantD += lastLoadingTime - loadingTime; // Otherwise, just adapt to the new loading time
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
lastLoadingTime = loadingTime;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
// Calculate the new emission instant
|
|
Toshihiro Shimizu |
890ddd |
emissionInstant = tmax((int)(emissionInstantD += targetFrameTime), 0);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
// Sleep until the next emission instant has been reached
|
|
Toshihiro Shimizu |
890ddd |
while (timer.getTotalTime() < emissionInstant)
|
|
Toshihiro Shimizu |
890ddd |
msleep(1);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
m_abort = false;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//==========================================================================================
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
FlipSlider::FlipSlider(QWidget *parent)
|
|
Toshihiro Shimizu |
890ddd |
: QAbstractSlider(parent), m_enabled(false), m_progressBarStatus(0)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
setObjectName("FlipSlider");
|
|
Toshihiro Shimizu |
890ddd |
setOrientation(Qt::Horizontal);
|
|
Toshihiro Shimizu |
890ddd |
setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
void FlipSlider::paintEvent(QPaintEvent *ev)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
QPainter p(this);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//Draw the progress status colorbar
|
|
Toshihiro Shimizu |
890ddd |
QRect sliderRect(QPoint(), size());
|
|
Toshihiro Shimizu |
890ddd |
QRect colorRect(sliderRect.adjusted(
|
|
Toshihiro Shimizu |
890ddd |
PBMarkerMarginLeft,
|
|
Toshihiro Shimizu |
890ddd |
PBColorMarginTop,
|
|
Toshihiro Shimizu |
890ddd |
-PBMarkerMarginRight,
|
|
Toshihiro Shimizu |
890ddd |
-PBColorMarginBottom));
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
int val, maxValuePlusStep = maximum() + singleStep();
|
|
Toshihiro Shimizu |
890ddd |
int colorWidth = colorRect.width(), colorHeight = colorRect.height();
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
p.setPen(Qt::NoPen);
|
|
Toshihiro Shimizu |
890ddd |
int currPos = PBColorMarginLeft, nextPos;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//paint the base of slider
|
|
Toshihiro Shimizu |
890ddd |
if (m_enabled && m_progressBarStatus && !m_progressBarStatus->empty()) {
|
|
Toshihiro Shimizu |
890ddd |
unsigned int i, pbStatusSize = m_progressBarStatus->size();
|
|
Toshihiro Shimizu |
890ddd |
for (i = 0, val = minimum() + singleStep();
|
|
Toshihiro Shimizu |
890ddd |
i < pbStatusSize;
|
|
Toshihiro Shimizu |
890ddd |
++i, val += singleStep()) {
|
|
Toshihiro Shimizu |
890ddd |
nextPos = sliderPositionFromValue(minimum(), maxValuePlusStep, val, colorWidth) + PBMarkerMarginLeft;
|
|
Toshihiro Shimizu |
890ddd |
if (i == pbStatusSize - 1)
|
|
Toshihiro Shimizu |
890ddd |
nextPos += PBMarkerMarginRight;
|
|
Toshihiro Shimizu |
890ddd |
p.fillRect(currPos, PBColorMarginTop, nextPos - currPos, colorHeight,
|
|
Toshihiro Shimizu |
890ddd |
((*m_progressBarStatus)[i] == PBFrameStarted) ? PBStartedColor : ((*m_progressBarStatus)[i] == PBFrameFinished) ? PBFinishedColor : PBNotStartedColor);
|
|
Toshihiro Shimizu |
890ddd |
currPos = nextPos;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//Draw frames outside the pb
|
|
Toshihiro Shimizu |
890ddd |
if (val < maximum())
|
|
Toshihiro Shimizu |
890ddd |
p.fillRect(currPos, PBColorMarginTop, width() - PBColorMarginRight - currPos, colorHeight, PBNotStartedColor);
|
|
Toshihiro Shimizu |
890ddd |
} else
|
|
Toshihiro Shimizu |
890ddd |
p.fillRect(PBColorMarginLeft, PBColorMarginTop, sliderRect.width() - PBColorMarginLeft - PBColorMarginRight, colorHeight, PBBaseColor);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//Draw the PB Overlay
|
|
Toshihiro Shimizu |
890ddd |
int overlayInnerWidth = PBOverlay.width() - PBColorMarginLeft - PBColorMarginRight;
|
|
Toshihiro Shimizu |
890ddd |
int markerInnerWidth = PBMarker.width() - PBMarkerMarginLeft - PBMarkerMarginRight;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
p.drawImage(
|
|
Toshihiro Shimizu |
890ddd |
QRect(0, 0, PBColorMarginLeft, height()),
|
|
Toshihiro Shimizu |
890ddd |
PBOverlay,
|
|
Toshihiro Shimizu |
890ddd |
QRect(0, 0, PBColorMarginLeft, PBOverlay.height()));
|
|
Toshihiro Shimizu |
890ddd |
p.drawImage(
|
|
Toshihiro Shimizu |
890ddd |
QRect(PBColorMarginLeft, 0, sliderRect.width() - PBColorMarginLeft - PBColorMarginRight, height()),
|
|
Toshihiro Shimizu |
890ddd |
PBOverlay,
|
|
Toshihiro Shimizu |
890ddd |
QRect(PBColorMarginLeft, 0, overlayInnerWidth, PBOverlay.height()));
|
|
Toshihiro Shimizu |
890ddd |
p.drawImage(
|
|
Toshihiro Shimizu |
890ddd |
QRect(width() - PBColorMarginRight, 0, PBColorMarginRight, height()),
|
|
Toshihiro Shimizu |
890ddd |
PBOverlay,
|
|
Toshihiro Shimizu |
890ddd |
QRect(PBOverlay.width() - PBColorMarginRight, 0, PBColorMarginRight, PBOverlay.height()));
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//Draw the position marker
|
|
Toshihiro Shimizu |
890ddd |
currPos = sliderPositionFromValue(minimum(), maxValuePlusStep, value(), colorWidth) + PBMarkerMarginLeft;
|
|
Toshihiro Shimizu |
890ddd |
nextPos = sliderPositionFromValue(minimum(), maxValuePlusStep, value() + singleStep(), colorWidth) + PBMarkerMarginLeft;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
p.drawImage(
|
|
Toshihiro Shimizu |
890ddd |
QRect(currPos - PBMarkerMarginLeft, 0, PBMarkerMarginLeft, height()),
|
|
Toshihiro Shimizu |
890ddd |
PBMarker,
|
|
Toshihiro Shimizu |
890ddd |
QRect(0, 0, PBMarkerMarginLeft, PBMarker.height()));
|
|
Toshihiro Shimizu |
890ddd |
p.drawImage(
|
|
Toshihiro Shimizu |
890ddd |
QRect(currPos, 0, nextPos - currPos, height()),
|
|
Toshihiro Shimizu |
890ddd |
PBMarker,
|
|
Toshihiro Shimizu |
890ddd |
QRect(PBMarkerMarginLeft, 0, markerInnerWidth, PBMarker.height()));
|
|
Toshihiro Shimizu |
890ddd |
p.drawImage(
|
|
Toshihiro Shimizu |
890ddd |
QRect(nextPos, 0, PBMarkerMarginRight, height()),
|
|
Toshihiro Shimizu |
890ddd |
PBMarker,
|
|
Toshihiro Shimizu |
890ddd |
QRect(PBMarker.width() - PBMarkerMarginRight, 0, PBMarkerMarginRight, PBMarker.height()));
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
inline int FlipSlider::sliderPositionFromValue(int min, int max, int val, int span)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
return tceil(span * ((val - min) / (double)(max - min)));
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
inline int FlipSlider::sliderValueFromPosition(int min, int max, int step, int pos, int span)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
int colorBarPos = pos - PBColorMarginLeft;
|
|
Toshihiro Shimizu |
890ddd |
int colorSpan = span - PBColorMarginLeft - PBColorMarginRight;
|
|
Toshihiro Shimizu |
890ddd |
int tempRelativePos = (max - min + step) * (colorBarPos / (double)colorSpan);
|
|
Toshihiro Shimizu |
890ddd |
return min + (tempRelativePos - tempRelativePos % step);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
inline int FlipSlider::pageStepVal(int val)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
return tcrop(value() + pageStep() * tsign(val - value()), minimum(), maximum());
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//Mouse Press behaviour:
|
|
Toshihiro Shimizu |
890ddd |
// a) If middle button, just put frame to cursor position
|
|
Toshihiro Shimizu |
890ddd |
// b) If left button, and cursor on current frame pos, do like (a)
|
|
Toshihiro Shimizu |
890ddd |
// c) If left button, and cursor NOT on curr.. perform a page up/down on
|
|
Toshihiro Shimizu |
890ddd |
// the side of cursor pos
|
|
Toshihiro Shimizu |
890ddd |
void FlipSlider::mousePressEvent(QMouseEvent *me)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
emit flipSliderPressed();
|
|
Toshihiro Shimizu |
890ddd |
int cursorValue = sliderValueFromPosition(minimum(), maximum(), singleStep(), me->pos().x(), width());
|
|
Toshihiro Shimizu |
890ddd |
if (me->button() == Qt::MidButton)
|
|
Toshihiro Shimizu |
890ddd |
if (cursorValue == value())
|
|
Toshihiro Shimizu |
890ddd |
setSliderDown(true);
|
|
Toshihiro Shimizu |
890ddd |
else {
|
|
Toshihiro Shimizu |
890ddd |
//Move the page step
|
|
Toshihiro Shimizu |
890ddd |
setValue(pageStepVal(cursorValue));
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
else if (me->button() == Qt::LeftButton && cursorValue != value())
|
|
Toshihiro Shimizu |
890ddd |
setValue(cursorValue);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
void FlipSlider::mouseMoveEvent(QMouseEvent *me)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
if (isSliderDown() || me->buttons() & Qt::LeftButton) {
|
|
Toshihiro Shimizu |
890ddd |
int cursorValue = sliderValueFromPosition(minimum(), maximum(), singleStep(), me->pos().x(), width());
|
|
Toshihiro Shimizu |
890ddd |
setValue(cursorValue);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
void FlipSlider::mouseReleaseEvent(QMouseEvent *me)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
setSliderDown(false);
|
|
Toshihiro Shimizu |
890ddd |
emit flipSliderReleased();
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//=============================================================================
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
enum {
|
|
Toshihiro Shimizu |
890ddd |
eShowCompare = 0x001,
|
|
Toshihiro Shimizu |
890ddd |
eShowBg = 0x002,
|
|
Toshihiro Shimizu |
890ddd |
eShowFramerate = 0x004,
|
|
Toshihiro Shimizu |
890ddd |
eShowVcr = 0x008,
|
|
Toshihiro Shimizu |
890ddd |
eShowcolorFilter = 0x010,
|
|
Toshihiro Shimizu |
890ddd |
eShowCustom = 0x020,
|
|
Toshihiro Shimizu |
890ddd |
eShowHisto = 0x040,
|
|
Toshihiro Shimizu |
890ddd |
eShowSave = 0x080,
|
|
Toshihiro Shimizu |
890ddd |
eShowDefineSubCamera = 0x100,
|
|
Toshihiro Shimizu |
890ddd |
eShowFilledRaster = 0x200,
|
|
Toshihiro Shimizu |
890ddd |
eShowDefineLoadBox = 0x400,
|
|
Toshihiro Shimizu |
890ddd |
eShowUseLoadBox = 0x800,
|
|
Toshihiro Shimizu |
890ddd |
eShowHowMany = 0x1000
|
|
Toshihiro Shimizu |
890ddd |
};
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
FlipConsole::FlipConsole(QVBoxLayout *mainLayout,
|
|
Toshihiro Shimizu |
890ddd |
UINT gadgetsMask,
|
|
Toshihiro Shimizu |
890ddd |
bool isLinkable,
|
|
Toshihiro Shimizu |
890ddd |
QWidget *customWidget,
|
|
Toshihiro Shimizu |
890ddd |
const QString &customizeId,
|
|
Toshihiro Shimizu |
890ddd |
FlipConsoleOwner *consoleOwner,
|
|
Toshihiro Shimizu |
890ddd |
bool enableBlanks)
|
|
Toshihiro Shimizu |
890ddd |
: m_gadgetsMask(gadgetsMask), m_from(1), m_to(1), m_step(1), m_currentFrame(1), m_framesCount(1), m_settings(), m_fps(24), m_isPlay(false), m_reverse(false), m_doubleRed(0), m_doubleGreen(0), m_doubleBlue(0), m_doubleRedAction(0), m_doubleGreenAction(0), m_doubleBlueAction(0), m_fpsSlider(0), m_markerFrom(0), m_markerTo(-1), m_playbackExecutor(), m_drawBlanksEnabled(enableBlanks), m_blanksCount(0), m_blankColor(TPixel::Transparent), m_blanksToDraw(0), m_isLinkable(isLinkable), m_customAction(0), m_customizeMask(eShowHowMany - 1), m_fpsLabelAction(0), m_fpsSliderAction(0), m_fpsFieldAction(0), m_fpsField(0), m_customizeId(customizeId), m_histoSep(0), m_filledRasterSep(0), m_bgSep(0), m_vcrSep(0), m_compareSep(0), m_saveSep(0), m_colorFilterSep(0), m_subcamSep(0), m_playToolBar(0), m_colorFilterGroup(0), m_fpsLabel(0), m_consoleOwner(consoleOwner), m_enableBlankFrameButton(0)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
QString s = QSettings().value(m_customizeId).toString();
|
|
Toshihiro Shimizu |
890ddd |
if (s != "")
|
|
Toshihiro Shimizu |
890ddd |
m_customizeMask = s.toUInt();
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
if (m_gadgetsMask == 0)
|
|
Toshihiro Shimizu |
890ddd |
return;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//mainLayout->setMargin(1);
|
|
Toshihiro Shimizu |
890ddd |
//mainLayout->setSpacing(0);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//create toolbars other than frame slider
|
|
Toshihiro Shimizu |
890ddd |
if (m_gadgetsMask & (~eFrames)) {
|
|
Toshihiro Shimizu |
890ddd |
createPlayToolBar(customWidget != 0);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
m_playToolBarContainer = new ToolBarContainer();
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
QHBoxLayout *hLayout = new QHBoxLayout;
|
|
Toshihiro Shimizu |
890ddd |
hLayout->setMargin(0);
|
|
Toshihiro Shimizu |
890ddd |
hLayout->setSpacing(0);
|
|
Toshihiro Shimizu |
890ddd |
hLayout->setAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
DvScrollWidget *scrollableContainer = new DvScrollWidget;
|
|
Toshihiro Shimizu |
890ddd |
scrollableContainer->setWidget(m_playToolBar);
|
|
Toshihiro Shimizu |
890ddd |
hLayout->addWidget(scrollableContainer);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//show fps
|
|
Toshihiro Shimizu |
890ddd |
if (m_gadgetsMask & eRate) {
|
|
Toshihiro Shimizu |
890ddd |
QFrame *fpsSliderFrame = createFpsSlider();
|
|
Toshihiro Shimizu |
890ddd |
hLayout->addWidget(fpsSliderFrame, 1);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
m_playToolBarContainer->setLayout(hLayout);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
mainLayout->addWidget(m_playToolBarContainer);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
// create frame slider
|
|
Toshihiro Shimizu |
890ddd |
if (m_gadgetsMask & eFrames) {
|
|
Toshihiro Shimizu |
890ddd |
m_frameSliderFrame = createFrameSlider();
|
|
Toshihiro Shimizu |
890ddd |
mainLayout->addWidget(m_frameSliderFrame);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
if (customWidget) {
|
|
Toshihiro Shimizu |
890ddd |
m_customAction = m_playToolBar->addWidget(customWidget);
|
|
Toshihiro Shimizu |
890ddd |
m_customSep = m_playToolBar->addSeparator();
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
applyCustomizeMask();
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
bool ret = connect(&m_playbackExecutor, SIGNAL(nextFrame(int)), this, SLOT(onNextFrame(int)), Qt::BlockingQueuedConnection);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
assert(ret);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//parent->setLayout(mainLayout);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
void FlipConsole::showHideAllParts(bool isShow)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
m_playToolBarContainer->setVisible(isShow);
|
|
Toshihiro Shimizu |
890ddd |
m_frameSliderFrame->setVisible(isShow);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
void showEvent(QShowEvent *);
|
|
Toshihiro Shimizu |
890ddd |
void hideEvent(QHideEvent *);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
void FlipConsole::makeCurrent()
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
if (m_currentConsole == this)
|
|
Toshihiro Shimizu |
890ddd |
return;
|
|
Toshihiro Shimizu |
890ddd |
int i = m_visibleConsoles.indexOf(this);
|
|
Toshihiro Shimizu |
890ddd |
if (i >= 0)
|
|
Toshihiro Shimizu |
890ddd |
m_visibleConsoles.takeAt(i);
|
|
Toshihiro Shimizu |
890ddd |
m_visibleConsoles.append(this);
|
|
Toshihiro Shimizu |
890ddd |
m_currentConsole = this;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
void FlipConsole::setActive(bool active)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
if (active)
|
|
Toshihiro Shimizu |
890ddd |
makeCurrent();
|
|
Toshihiro Shimizu |
890ddd |
else {
|
|
Toshihiro Shimizu |
890ddd |
pressButton(ePause);
|
|
Toshihiro Shimizu |
890ddd |
int i = m_visibleConsoles.indexOf(this);
|
|
Toshihiro Shimizu |
890ddd |
if (i >= 0)
|
|
Toshihiro Shimizu |
890ddd |
m_visibleConsoles.takeAt(i);
|
|
Toshihiro Shimizu |
890ddd |
if (m_currentConsole == this) {
|
|
Toshihiro Shimizu |
890ddd |
if (!m_visibleConsoles.empty())
|
|
Toshihiro Shimizu |
890ddd |
m_currentConsole = m_visibleConsoles.last();
|
|
Toshihiro Shimizu |
890ddd |
else
|
|
Toshihiro Shimizu |
890ddd |
m_currentConsole = 0;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#define LX 21
|
|
Toshihiro Shimizu |
890ddd |
#define LY 17
|
|
Toshihiro Shimizu |
890ddd |
class DoubleButton : public QToolButton
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
QAction *m_firstAction, *m_secondAction;
|
|
Toshihiro Shimizu |
890ddd |
QIcon::Mode m_firstMode, m_secondMode;
|
|
Toshihiro Shimizu |
890ddd |
QIcon::State m_firstState, m_secondState;
|
|
Toshihiro Shimizu |
890ddd |
bool m_enabled;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
public:
|
|
Toshihiro Shimizu |
890ddd |
DoubleButton(QAction *firstAction, QAction *secondAction, QWidget *parent = 0)
|
|
Toshihiro Shimizu |
890ddd |
: QToolButton(parent), m_firstAction(firstAction), m_secondAction(secondAction), m_firstMode(QIcon::Normal), m_secondMode(QIcon::Normal), m_firstState(QIcon::Off), m_secondState(QIcon::Off), m_enabled(true)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
setFixedSize(LX, LY);
|
|
Toshihiro Shimizu |
890ddd |
setMouseTracking(true);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
void setEnabledSecondButton(bool state)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
if (!state && m_secondAction->isChecked())
|
|
Toshihiro Shimizu |
890ddd |
m_secondAction->trigger();
|
|
Toshihiro Shimizu |
890ddd |
m_enabled = state;
|
|
Toshihiro Shimizu |
890ddd |
update();
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
protected:
|
|
Toshihiro Shimizu |
890ddd |
void paintEvent(QPaintEvent *e)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
QPainter p(this);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
p.drawPixmap(0, 0, m_firstAction->icon().pixmap(QSize(LX, LY / 2), m_firstAction->isChecked() ? QIcon::Normal : m_firstMode,
|
|
Toshihiro Shimizu |
890ddd |
m_firstAction->isChecked() ? QIcon::On : m_firstState));
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
QIcon::Mode mode = m_enabled ? (m_secondAction->isChecked() ? QIcon::Normal : m_secondMode) : QIcon::Disabled;
|
|
Toshihiro Shimizu |
890ddd |
QIcon::State state = m_enabled ? (m_secondAction->isChecked() ? QIcon::On : m_secondState) : QIcon::Off;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
p.drawPixmap(0, LY / 2 + 1, m_secondAction->icon().pixmap(QSize(LX, LY / 2), mode, state));
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
void mousePressEvent(QMouseEvent *e)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
QRect firstActionRect(0, 0, LX, LY / 2);
|
|
Toshihiro Shimizu |
890ddd |
QRect secondActionRect(0, LY / 2 + 1, LX, LY / 2);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
QPoint pos = e->pos();
|
|
Toshihiro Shimizu |
890ddd |
if (firstActionRect.contains(pos)) {
|
|
Toshihiro Shimizu |
890ddd |
m_firstAction->trigger();
|
|
Toshihiro Shimizu |
890ddd |
} else {
|
|
Toshihiro Shimizu |
890ddd |
if (m_enabled)
|
|
Toshihiro Shimizu |
890ddd |
m_secondAction->trigger();
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
update();
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
void mouseMoveEvent(QMouseEvent *e)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
QPoint pos = e->pos();
|
|
Toshihiro Shimizu |
890ddd |
QRect firstActionRect(0, 0, LX, LY / 2);
|
|
Toshihiro Shimizu |
890ddd |
QRect secondActionRect(0, LY / 2 + 1, LX, LY / 2);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
m_firstState = QIcon::Off;
|
|
Toshihiro Shimizu |
890ddd |
m_secondState = QIcon::Off;
|
|
Toshihiro Shimizu |
890ddd |
m_firstMode = QIcon::Normal;
|
|
Toshihiro Shimizu |
890ddd |
m_secondMode = QIcon::Normal;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
if (firstActionRect.contains(pos)) {
|
|
Toshihiro Shimizu |
890ddd |
m_firstMode = QIcon::Active;
|
|
Toshihiro Shimizu |
890ddd |
setToolTip(m_firstAction->toolTip());
|
|
Toshihiro Shimizu |
890ddd |
} else if (secondActionRect.contains(pos) && m_enabled) {
|
|
Toshihiro Shimizu |
890ddd |
m_secondMode = QIcon::Active;
|
|
Toshihiro Shimizu |
890ddd |
setToolTip(m_secondAction->toolTip());
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
update();
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
void leaveEvent(QEvent *e)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
m_firstMode = QIcon::Normal;
|
|
Toshihiro Shimizu |
890ddd |
m_firstState = QIcon::Off;
|
|
Toshihiro Shimizu |
890ddd |
m_secondMode = QIcon::Normal;
|
|
Toshihiro Shimizu |
890ddd |
m_secondState = QIcon::Off;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
update();
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
QToolButton::leaveEvent(e);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
};
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
void FlipConsole::enableButton(UINT button, bool enable, bool doShowHide)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
#if defined(MACOSX) //on mac, the sound playback in flip is broken..
|
|
Toshihiro Shimizu |
890ddd |
if (button == eSound)
|
|
Toshihiro Shimizu |
890ddd |
enable = false;
|
|
Toshihiro Shimizu |
890ddd |
#endif
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
if (!m_playToolBar)
|
|
Toshihiro Shimizu |
890ddd |
return;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
QList<qaction *=""> list = m_playToolBar->actions();</qaction>
|
|
Toshihiro Shimizu |
890ddd |
int i;
|
|
Toshihiro Shimizu |
890ddd |
for (i = 0; i < (int)list.size(); i++)
|
|
Toshihiro Shimizu |
890ddd |
if (list[i]->data().toUInt() == button) {
|
|
Toshihiro Shimizu |
890ddd |
if (button == eSound)
|
|
Toshihiro Shimizu |
890ddd |
if (doShowHide)
|
|
Toshihiro Shimizu |
890ddd |
m_soundSep->setVisible(enable);
|
|
Toshihiro Shimizu |
890ddd |
else
|
|
Toshihiro Shimizu |
890ddd |
m_soundSep->setEnabled(enable);
|
|
Toshihiro Shimizu |
890ddd |
if (button == eHisto) {
|
|
Toshihiro Shimizu |
890ddd |
if (doShowHide)
|
|
Toshihiro Shimizu |
890ddd |
m_histoSep->setVisible(enable && m_customizeMask & eShowHisto);
|
|
Toshihiro Shimizu |
890ddd |
else
|
|
Toshihiro Shimizu |
890ddd |
m_histoSep->setEnabled(enable);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
if (doShowHide)
|
|
Toshihiro Shimizu |
890ddd |
list[i]->setVisible(enable);
|
|
Toshihiro Shimizu |
890ddd |
else
|
|
Toshihiro Shimizu |
890ddd |
list[i]->setEnabled(enable);
|
|
Toshihiro Shimizu |
890ddd |
if (!enable && list[i]->isChecked())
|
|
Toshihiro Shimizu |
890ddd |
pressButton((EGadget)button);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
return;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//double buttons are special, they are not accessible directly from the playtoolbar...
|
|
Toshihiro Shimizu |
890ddd |
switch ((EGadget)button) {
|
|
Toshihiro Shimizu |
890ddd |
case eGRed:
|
|
Toshihiro Shimizu |
890ddd |
if (m_doubleRed)
|
|
Toshihiro Shimizu |
890ddd |
m_doubleRed->setEnabledSecondButton(enable);
|
|
Toshihiro Shimizu |
890ddd |
CASE eGGreen : if (m_doubleGreen)
|
|
Toshihiro Shimizu |
890ddd |
m_doubleGreen->setEnabledSecondButton(enable);
|
|
Toshihiro Shimizu |
890ddd |
CASE eGBlue : if (m_doubleBlue)
|
|
Toshihiro Shimizu |
890ddd |
m_doubleBlue->setEnabledSecondButton(enable);
|
|
Toshihiro Shimizu |
890ddd |
break;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
void FlipConsole::toggleLinked()
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
m_areLinked = !m_areLinked;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
int i;
|
|
Toshihiro Shimizu |
890ddd |
FlipConsole *playingConsole = 0;
|
|
Toshihiro Shimizu |
890ddd |
for (i = 0; i < m_visibleConsoles.size(); i++) {
|
|
Toshihiro Shimizu |
890ddd |
playingConsole = m_visibleConsoles.at(i);
|
|
Toshihiro Shimizu |
890ddd |
if (playingConsole->m_isLinkable && playingConsole->m_playbackExecutor.isRunning())
|
|
Toshihiro Shimizu |
890ddd |
break;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
if (i == m_visibleConsoles.size())
|
|
Toshihiro Shimizu |
890ddd |
return;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//if we are here, flip is playing!
|
|
Toshihiro Shimizu |
890ddd |
m_isLinkedPlaying = m_areLinked;
|
|
Toshihiro Shimizu |
890ddd |
int button = m_areLinked ? (playingConsole->m_isPlay ? ePlay : eLoop) : ePause;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
for (i = 0; i < m_visibleConsoles.size(); i++) {
|
|
Toshihiro Shimizu |
890ddd |
FlipConsole *console = m_visibleConsoles.at(i);
|
|
Toshihiro Shimizu |
890ddd |
if (console->m_isLinkable && console != playingConsole) {
|
|
Toshihiro Shimizu |
890ddd |
console->setChecked(button, true);
|
|
Toshihiro Shimizu |
890ddd |
console->doButtonPressed(button);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
bool FlipConsole::drawBlanks(int from, int to)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
if (m_blanksCount == 0 || m_isPlay || m_framesCount <= 1)
|
|
Toshihiro Shimizu |
890ddd |
return false;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//enable blanks only when the blank button is pressed
|
|
Toshihiro Shimizu |
890ddd |
if (m_enableBlankFrameButton && !m_enableBlankFrameButton->isChecked())
|
|
Toshihiro Shimizu |
890ddd |
return false;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
if (m_blanksToDraw > 1 ||
|
|
Toshihiro Shimizu |
890ddd |
(m_blanksToDraw == 0 &&
|
|
Toshihiro Shimizu |
890ddd |
((m_reverse && m_currentFrame - m_step < from) || (!m_reverse && m_currentFrame + m_step > to)))) //we are on the last frame of the loop
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
m_blanksToDraw = (m_blanksToDraw == 0 ? m_blanksCount : m_blanksToDraw - 1);
|
|
Toshihiro Shimizu |
890ddd |
m_settings.m_blankColor = m_blankColor;
|
|
Toshihiro Shimizu |
890ddd |
m_settings.m_drawBlankFrame = true;
|
|
Toshihiro Shimizu |
890ddd |
m_consoleOwner->onDrawFrame(from, m_settings);
|
|
Toshihiro Shimizu |
890ddd |
m_settings.m_drawBlankFrame = false;
|
|
Toshihiro Shimizu |
890ddd |
return true;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
m_blanksToDraw = 0;
|
|
Toshihiro Shimizu |
890ddd |
return false;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
void FlipConsole::onNextFrame(int fps)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
if (fps < 0) //can be negative only if is a linked console; it means that the master console is playing backward
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
bool reverse = m_reverse;
|
|
Toshihiro Shimizu |
890ddd |
m_reverse = true;
|
|
Toshihiro Shimizu |
890ddd |
fps = -fps;
|
|
Toshihiro Shimizu |
890ddd |
playNextFrame();
|
|
Toshihiro Shimizu |
890ddd |
m_reverse = reverse;
|
|
Toshihiro Shimizu |
890ddd |
} else
|
|
Toshihiro Shimizu |
890ddd |
playNextFrame();
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
if (fps == -1)
|
|
Toshihiro Shimizu |
890ddd |
return;
|
|
Toshihiro Shimizu |
890ddd |
if (m_fpsLabel)
|
|
Toshihiro Shimizu |
890ddd |
m_fpsLabel->setText(tr(" FPS ") + QString::number(fps * tsign(m_fps)) + "/");
|
|
Toshihiro Shimizu |
890ddd |
if (m_fpsField) {
|
|
Toshihiro Shimizu |
890ddd |
if (fps == abs(m_fps))
|
|
Toshihiro Shimizu |
890ddd |
m_fpsField->setLineEditBackgroundColor(Qt::green);
|
|
Toshihiro Shimizu |
890ddd |
else
|
|
Toshihiro Shimizu |
890ddd |
m_fpsField->setLineEditBackgroundColor(Qt::red);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
void FlipConsole::playNextFrame()
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
int from = m_from, to = m_to;
|
|
Toshihiro Shimizu |
890ddd |
if (m_markerFrom <= m_markerTo)
|
|
Toshihiro Shimizu |
890ddd |
from = m_markerFrom, to = m_markerTo;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
if (m_framesCount == 0 || (m_isPlay && m_currentFrame == (m_reverse ? from : to))) {
|
|
Toshihiro Shimizu |
890ddd |
doButtonPressed(ePause);
|
|
Toshihiro Shimizu |
890ddd |
setChecked(m_isPlay ? ePlay : eLoop, false);
|
|
Toshihiro Shimizu |
890ddd |
setChecked(ePause, true);
|
|
Toshihiro Shimizu |
890ddd |
if (Preferences::instance()->rewindAfterPlaybackEnabled())
|
|
Toshihiro Shimizu |
890ddd |
m_currentFrame = (m_reverse ? to : from);
|
|
Toshihiro Shimizu |
890ddd |
emit playStateChanged(false);
|
|
Toshihiro Shimizu |
890ddd |
} else {
|
|
Toshihiro Shimizu |
890ddd |
if (drawBlanks(from, to))
|
|
Toshihiro Shimizu |
890ddd |
return;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
if (m_reverse)
|
|
Toshihiro Shimizu |
890ddd |
m_currentFrame = ((m_currentFrame - m_step < from) ? to : m_currentFrame - m_step);
|
|
Toshihiro Shimizu |
890ddd |
else
|
|
Toshihiro Shimizu |
890ddd |
m_currentFrame = ((m_currentFrame + m_step > to) ? from : m_currentFrame + m_step);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
m_currFrameSlider->setValue(m_currentFrame);
|
|
Toshihiro Shimizu |
890ddd |
m_editCurrFrame->setText(QString::number(m_currentFrame));
|
|
Toshihiro Shimizu |
890ddd |
m_settings.m_blankColor = TPixel::Transparent;
|
|
Toshihiro Shimizu |
890ddd |
m_settings.m_recomputeIfNeeded = true;
|
|
Toshihiro Shimizu |
890ddd |
m_consoleOwner->onDrawFrame(m_currentFrame, m_settings);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
void FlipConsole::updateCurrentFPS(int val)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
setCurrentFPS(val);
|
|
Toshihiro Shimizu |
890ddd |
m_fpsSlider->setValue(m_fps);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
void FlipConsole::setFrameRate(int val)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
if (!m_fpsSlider)
|
|
Toshihiro Shimizu |
890ddd |
return;
|
|
Toshihiro Shimizu |
890ddd |
m_fpsSlider->setValue(val);
|
|
Toshihiro Shimizu |
890ddd |
setCurrentFPS(val);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
void FlipConsole::setCurrentFPS(bool dragging)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
setCurrentFPS(m_fpsField->getValue());
|
|
Toshihiro Shimizu |
890ddd |
m_fpsSlider->setValue(m_fps);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
void FlipConsole::setCurrentFPS(int val)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
if (m_fps == val)
|
|
Toshihiro Shimizu |
890ddd |
return;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
if (val == 0)
|
|
Toshihiro Shimizu |
890ddd |
val = 1;
|
|
Toshihiro Shimizu |
890ddd |
m_fps = val;
|
|
Toshihiro Shimizu |
890ddd |
m_fpsField->setValue(m_fps);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
if (m_playbackExecutor.isRunning() || m_isLinkedPlaying)
|
|
Toshihiro Shimizu |
890ddd |
m_reverse = (val < 0);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
if (m_fpsLabel)
|
|
Toshihiro Shimizu |
890ddd |
m_fpsLabel->setText(tr(" FPS "));
|
|
Toshihiro Shimizu |
890ddd |
if (m_fpsField)
|
|
Toshihiro Shimizu |
890ddd |
m_fpsField->setLineEditBackgroundColor(Qt::transparent);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
m_playbackExecutor.resetFps(m_fps);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
void FlipConsole::createButton(UINT buttonMask, const char *iconStr, const QString &tip, bool checkable, QActionGroup *group)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
QIcon icon = createQIconPNG(iconStr);
|
|
Toshihiro Shimizu |
890ddd |
QAction *action = new QAction(icon, tip, m_playToolBar);
|
|
Toshihiro Shimizu |
890ddd |
action->setData(QVariant(buttonMask));
|
|
Toshihiro Shimizu |
890ddd |
action->setCheckable(checkable);
|
|
Toshihiro Shimizu |
890ddd |
if (group)
|
|
Toshihiro Shimizu |
890ddd |
group->addAction(action);
|
|
Toshihiro Shimizu |
890ddd |
m_actions[(EGadget)buttonMask] = action;
|
|
Toshihiro Shimizu |
890ddd |
m_playToolBar->addAction(action);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
QAction *FlipConsole::createCheckedButtonWithBorderImage(UINT buttonMask, const char *iconStr, const QString &tip, bool checkable, QActionGroup *group, const char *cmdId)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
QIcon icon = createQIconPNG(iconStr);
|
|
Toshihiro Shimizu |
890ddd |
QWidgetAction *action = new QWidgetAction(m_playToolBar);
|
|
Toshihiro Shimizu |
890ddd |
action->setIcon(icon);
|
|
Toshihiro Shimizu |
890ddd |
action->setToolTip(tip);
|
|
Toshihiro Shimizu |
890ddd |
action->setData(QVariant(buttonMask));
|
|
Toshihiro Shimizu |
890ddd |
action->setCheckable(checkable);
|
|
Toshihiro Shimizu |
890ddd |
if (group)
|
|
Toshihiro Shimizu |
890ddd |
group->addAction(action);
|
|
Toshihiro Shimizu |
890ddd |
QToolButton *button = new QToolButton(m_playToolBar);
|
|
Toshihiro Shimizu |
890ddd |
button->setDefaultAction(action);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
m_buttons[(EGadget)buttonMask] = button;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
if (cmdId) {
|
|
Toshihiro Shimizu |
890ddd |
QAction *a = CommandManager::instance()->getAction(cmdId);
|
|
Toshihiro Shimizu |
890ddd |
if (a)
|
|
Toshihiro Shimizu |
890ddd |
button->addAction(a);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
action->setDefaultWidget(button);
|
|
Toshihiro Shimizu |
890ddd |
button->setObjectName("chackableButtonWithImageBorder");
|
|
Toshihiro Shimizu |
890ddd |
connect(button, SIGNAL(triggered(QAction *)), this, SLOT(onButtonPressed(QAction *)));
|
|
Toshihiro Shimizu |
890ddd |
//connect(action, SIGNAL(toggled(bool)), button, SLOT(setChecked(bool)));
|
|
Toshihiro Shimizu |
890ddd |
m_playToolBar->addAction(action);
|
|
Toshihiro Shimizu |
890ddd |
return action;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
QAction *FlipConsole::createDoubleButton(UINT buttonMask1, UINT buttonMask2,
|
|
Toshihiro Shimizu |
890ddd |
const char *iconStr1, const char *iconStr2,
|
|
Toshihiro Shimizu |
890ddd |
const QString &tip1, const QString &tip2,
|
|
Toshihiro Shimizu |
890ddd |
QActionGroup *group, DoubleButton *&widget)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
QAction *action1 = new QAction(createQIconPNG(iconStr1), tip1, m_playToolBar);
|
|
Toshihiro Shimizu |
890ddd |
QAction *action2 = new QAction(createQIconPNG(iconStr2), tip2, m_playToolBar);
|
|
Toshihiro Shimizu |
890ddd |
m_actions[(EGadget)buttonMask1] = action1;
|
|
Toshihiro Shimizu |
890ddd |
m_actions[(EGadget)buttonMask2] = action2;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
action1->setData(QVariant(buttonMask1));
|
|
Toshihiro Shimizu |
890ddd |
action1->setCheckable(true);
|
|
Toshihiro Shimizu |
890ddd |
action2->setData(QVariant(buttonMask2));
|
|
Toshihiro Shimizu |
890ddd |
action2->setCheckable(true);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
if (group) {
|
|
Toshihiro Shimizu |
890ddd |
group->addAction(action1);
|
|
Toshihiro Shimizu |
890ddd |
group->addAction(action2);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
widget = new DoubleButton(action1, action2, this);
|
|
Toshihiro Shimizu |
890ddd |
return m_playToolBar->addWidget(widget);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//m_playToolBar->addAction(action1);
|
|
Toshihiro Shimizu |
890ddd |
//m_playToolBar->addAction(action2);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
void FlipConsole::createOnOffButton(UINT buttonMask, const char *iconStr, const QString &tip, QActionGroup *group)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
QIcon icon = createQIconOnOffPNG(iconStr);
|
|
Toshihiro Shimizu |
890ddd |
QAction *action = new QAction(icon, tip, m_playToolBar);
|
|
Toshihiro Shimizu |
890ddd |
action->setData(QVariant(buttonMask));
|
|
Toshihiro Shimizu |
890ddd |
action->setCheckable(true);
|
|
Toshihiro Shimizu |
890ddd |
if (group)
|
|
Toshihiro Shimizu |
890ddd |
group->addAction(action);
|
|
Toshihiro Shimizu |
890ddd |
m_playToolBar->addAction(action);
|
|
Toshihiro Shimizu |
890ddd |
m_actions[(EGadget)buttonMask] = action;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//----------------------------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
void FlipConsole::addMenuItem(UINT id, const QString &text, QMenu *menu)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
QAction *a = new QAction(text, menu);
|
|
Toshihiro Shimizu |
890ddd |
a->setCheckable(true);
|
|
Toshihiro Shimizu |
890ddd |
a->setChecked(id & m_customizeMask);
|
|
Toshihiro Shimizu |
890ddd |
a->setData(QVariant(id));
|
|
Toshihiro Shimizu |
890ddd |
menu->addAction(a);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//----------------------------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
void FlipConsole::onCustomizeButtonPressed(QAction *a)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
UINT id = a->data().toUInt();
|
|
Toshihiro Shimizu |
890ddd |
if (a->isChecked())
|
|
Toshihiro Shimizu |
890ddd |
m_customizeMask = m_customizeMask | id;
|
|
Toshihiro Shimizu |
890ddd |
else
|
|
Toshihiro Shimizu |
890ddd |
m_customizeMask = m_customizeMask & (~id);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
QSettings().setValue(m_customizeId, QString::number(m_customizeMask));
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
applyCustomizeMask();
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//----------------------------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
void FlipConsole::applyCustomizeMask()
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
enableButton(eSave, m_customizeMask & eShowSave);
|
|
Toshihiro Shimizu |
890ddd |
//if(m_saveSep)
|
|
Toshihiro Shimizu |
890ddd |
// m_saveSep->setVisible(m_customizeMask&eShowSave);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
enableButton(eSaveImg, m_customizeMask & eShowCompare);
|
|
Toshihiro Shimizu |
890ddd |
enableButton(eCompare, m_customizeMask & eShowCompare);
|
|
Toshihiro Shimizu |
890ddd |
if (m_compareSep)
|
|
Toshihiro Shimizu |
890ddd |
m_compareSep->setVisible(m_customizeMask & eShowCompare);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
enableButton(eDefineSubCamera, m_customizeMask & eShowDefineSubCamera);
|
|
Toshihiro Shimizu |
890ddd |
enableButton(eDefineLoadBox, m_customizeMask & eShowDefineLoadBox);
|
|
Toshihiro Shimizu |
890ddd |
enableButton(eUseLoadBox, m_customizeMask & eShowUseLoadBox);
|
|
Toshihiro Shimizu |
890ddd |
if (m_subcamSep)
|
|
Toshihiro Shimizu |
890ddd |
m_subcamSep->setVisible(
|
|
Toshihiro Shimizu |
890ddd |
m_customizeMask & eShowDefineSubCamera ||
|
|
Toshihiro Shimizu |
890ddd |
m_customizeMask & eShowDefineLoadBox ||
|
|
Toshihiro Shimizu |
890ddd |
m_customizeMask & eShowUseLoadBox);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
enableButton(eWhiteBg, m_customizeMask & eShowBg);
|
|
Toshihiro Shimizu |
890ddd |
enableButton(eBlackBg, m_customizeMask & eShowBg);
|
|
Toshihiro Shimizu |
890ddd |
enableButton(eCheckBg, m_customizeMask & eShowBg);
|
|
Toshihiro Shimizu |
890ddd |
if (m_bgSep)
|
|
Toshihiro Shimizu |
890ddd |
m_bgSep->setVisible(m_customizeMask & eShowBg);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
if (m_fpsLabel && m_fpsSlider && m_fpsField) {
|
|
Toshihiro Shimizu |
890ddd |
m_fpsLabel->setVisible(m_customizeMask & eShowFramerate);
|
|
Toshihiro Shimizu |
890ddd |
m_fpsSlider->setVisible(m_customizeMask & eShowFramerate);
|
|
Toshihiro Shimizu |
890ddd |
m_fpsField->setVisible(m_customizeMask & eShowFramerate);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
enableButton(eFirst, m_customizeMask & eShowVcr);
|
|
Toshihiro Shimizu |
890ddd |
enableButton(ePrev, m_customizeMask & eShowVcr);
|
|
Toshihiro Shimizu |
890ddd |
enableButton(ePause, m_customizeMask & eShowVcr);
|
|
Toshihiro Shimizu |
890ddd |
enableButton(ePlay, m_customizeMask & eShowVcr);
|
|
Toshihiro Shimizu |
890ddd |
enableButton(eLoop, m_customizeMask & eShowVcr);
|
|
Toshihiro Shimizu |
890ddd |
enableButton(eNext, m_customizeMask & eShowVcr);
|
|
Toshihiro Shimizu |
890ddd |
enableButton(eLast, m_customizeMask & eShowVcr);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
if (m_vcrSep)
|
|
Toshihiro Shimizu |
890ddd |
m_vcrSep->setVisible(m_customizeMask & eShowVcr);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
enableButton(eMatte, m_customizeMask & eShowcolorFilter);
|
|
Toshihiro Shimizu |
890ddd |
enableButton(eHisto, m_customizeMask & eShowHisto);
|
|
Toshihiro Shimizu |
890ddd |
if (m_histoSep)
|
|
Toshihiro Shimizu |
890ddd |
m_histoSep->setVisible(m_customizeMask & eShowHisto);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
if (m_doubleRedAction) {
|
|
Toshihiro Shimizu |
890ddd |
m_doubleRedAction->setVisible(m_customizeMask & eShowcolorFilter);
|
|
Toshihiro Shimizu |
890ddd |
m_doubleGreenAction->setVisible(m_customizeMask & eShowcolorFilter);
|
|
Toshihiro Shimizu |
890ddd |
m_doubleBlueAction->setVisible(m_customizeMask & eShowcolorFilter);
|
|
Toshihiro Shimizu |
890ddd |
} else {
|
|
Toshihiro Shimizu |
890ddd |
enableButton(eRed, m_customizeMask & eShowcolorFilter);
|
|
Toshihiro Shimizu |
890ddd |
enableButton(eGreen, m_customizeMask & eShowcolorFilter);
|
|
Toshihiro Shimizu |
890ddd |
enableButton(eBlue, m_customizeMask & eShowcolorFilter);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
if (m_colorFilterGroup)
|
|
Toshihiro Shimizu |
890ddd |
m_colorFilterGroup->setVisible(m_customizeMask & eShowcolorFilter);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
if (m_colorFilterSep)
|
|
Toshihiro Shimizu |
890ddd |
m_colorFilterSep->setVisible(m_customizeMask & eShowcolorFilter);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
if (m_customAction) {
|
|
Toshihiro Shimizu |
890ddd |
bool visible = bool(m_customizeMask & eShowCustom);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
m_customAction->setVisible(visible);
|
|
Toshihiro Shimizu |
890ddd |
m_customSep->setVisible(visible);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
enableButton(eFilledRaster, m_customizeMask & eShowFilledRaster);
|
|
Toshihiro Shimizu |
890ddd |
if (m_filledRasterSep)
|
|
Toshihiro Shimizu |
890ddd |
m_filledRasterSep->setVisible(m_customizeMask & eShowFilledRaster);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
update();
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//----------------------------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
void FlipConsole::createCustomizeMenu(bool withCustomWidget)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
if (m_gadgetsMask & eCustomize) {
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
QIcon icon = createQIconPNG("options");
|
|
Toshihiro Shimizu |
890ddd |
QToolButton *button = new QToolButton();
|
|
Toshihiro Shimizu |
890ddd |
button->setIcon(icon);
|
|
Toshihiro Shimizu |
890ddd |
button->setPopupMode(QToolButton::MenuButtonPopup);
|
|
Toshihiro Shimizu |
890ddd |
button->setObjectName("flipCustomize");
|
|
Toshihiro Shimizu |
890ddd |
button->setStyleSheet("#flipCustomize { background-color: transparent; } #flipCustomize::menu-button { background-color: transparent; image: none; width: 34px; } #flipCustomize::menu-arrow { image: none; }");
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
QMenu *menu = new QMenu();
|
|
Toshihiro Shimizu |
890ddd |
button->setMenu(menu);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
m_playToolBar->addWidget(button);
|
|
Toshihiro Shimizu |
890ddd |
m_playToolBar->addSeparator();
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
if (m_gadgetsMask & eSave)
|
|
Toshihiro Shimizu |
890ddd |
addMenuItem(eShowSave, tr("Save"), menu);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
if (m_gadgetsMask & eSaveImg || m_gadgetsMask & eCompare)
|
|
Toshihiro Shimizu |
890ddd |
addMenuItem(eShowCompare, tr("Snapshot"), menu);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
if (m_gadgetsMask & eDefineSubCamera)
|
|
Toshihiro Shimizu |
890ddd |
addMenuItem(eShowDefineSubCamera, tr("Define Sub-camera"), menu);
|
|
Toshihiro Shimizu |
890ddd |
if (m_gadgetsMask & eDefineLoadBox)
|
|
Toshihiro Shimizu |
890ddd |
addMenuItem(eShowDefineLoadBox, tr("Define Loading Box"), menu);
|
|
Toshihiro Shimizu |
890ddd |
if (m_gadgetsMask & eUseLoadBox)
|
|
Toshihiro Shimizu |
890ddd |
addMenuItem(eShowUseLoadBox, tr("Use Loading Box"), menu);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
if (m_gadgetsMask & eWhiteBg || m_gadgetsMask & eBlackBg || m_gadgetsMask & eCheckBg)
|
|
Toshihiro Shimizu |
890ddd |
addMenuItem(eShowBg, tr("Background Colors"), menu);
|
|
Toshihiro Shimizu |
890ddd |
if (m_gadgetsMask & eRate)
|
|
Toshihiro Shimizu |
890ddd |
addMenuItem(eShowFramerate, tr("Framerate"), menu);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
addMenuItem(eShowVcr, tr("Playback Controls"), menu);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
if ((m_gadgetsMask & eRed) || (m_gadgetsMask & eGreen) ||
|
|
Toshihiro Shimizu |
890ddd |
(m_gadgetsMask & eBlue) || (m_gadgetsMask & eMatte))
|
|
Toshihiro Shimizu |
890ddd |
addMenuItem(eShowcolorFilter, tr("Color Channels"), menu);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
if (withCustomWidget)
|
|
Toshihiro Shimizu |
890ddd |
addMenuItem(eShowCustom, tr("Set Key"), menu);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
if (m_gadgetsMask & eHisto)
|
|
Toshihiro Shimizu |
890ddd |
addMenuItem(eShowHisto, tr("Histogram"), menu);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
if (m_gadgetsMask & eFilledRaster)
|
|
Toshihiro Shimizu |
890ddd |
addMenuItem(eFilledRaster, tr("Display Areas as Filled"), menu);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
bool ret = connect(menu, SIGNAL(triggered(QAction *)), this, SLOT(onCustomizeButtonPressed(QAction *)));
|
|
Toshihiro Shimizu |
890ddd |
assert(ret);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
void FlipConsole::createPlayToolBar(bool withCustomWidget)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
bool ret = true;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
m_playToolBar = new QToolBar(this);
|
|
Toshihiro Shimizu |
890ddd |
m_playToolBar->setMovable(false);
|
|
Toshihiro Shimizu |
890ddd |
m_playToolBar->setObjectName("FlipConsolePlayToolBar");
|
|
Toshihiro Shimizu |
890ddd |
// m_playToolBar->setObjectName("chackableButtonToolBar");
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//m_playToolBar->setSizePolicy(QSizePolicy::Fixed,QSizePolicy::Fixed);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
createCustomizeMenu(withCustomWidget);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
if (m_gadgetsMask & eSave) {
|
|
Toshihiro Shimizu |
890ddd |
//just reuse the icon file named "savepalette"
|
|
Toshihiro Shimizu |
890ddd |
createButton(eSave, "savepalette", tr("&Save Images"), false);
|
|
Toshihiro Shimizu |
890ddd |
//m_saveSep = m_playToolBar->addSeparator();
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
// snapshot
|
|
Toshihiro Shimizu |
890ddd |
bool separator = false;
|
|
Toshihiro Shimizu |
890ddd |
if (m_gadgetsMask & eSaveImg) {
|
|
Toshihiro Shimizu |
890ddd |
createButton(eSaveImg, "snapshot", tr("&Snapshot"), false);
|
|
Toshihiro Shimizu |
890ddd |
separator = true;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
if (m_gadgetsMask & eCompare) {
|
|
Toshihiro Shimizu |
890ddd |
createButton(eCompare, "compare", tr("&Compare to Snapshot"), true);
|
|
Toshihiro Shimizu |
890ddd |
separator = true;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
if (separator)
|
|
Toshihiro Shimizu |
890ddd |
m_compareSep = m_playToolBar->addSeparator();
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
// sub camera
|
|
Toshihiro Shimizu |
890ddd |
separator = false;
|
|
Toshihiro Shimizu |
890ddd |
if (m_gadgetsMask & eDefineSubCamera) {
|
|
Toshihiro Shimizu |
890ddd |
createButton(eDefineSubCamera, "define_subcamera_preview", tr("&Define Sub-camera"), true);
|
|
Toshihiro Shimizu |
890ddd |
separator = true;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
if (m_gadgetsMask & eDefineLoadBox) {
|
|
Toshihiro Shimizu |
890ddd |
createButton(eDefineLoadBox, "define_subcamera_preview", tr("&Define Loading Box"), true);
|
|
Toshihiro Shimizu |
890ddd |
separator = true;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
if (m_gadgetsMask & eUseLoadBox) {
|
|
Toshihiro Shimizu |
890ddd |
createButton(eUseLoadBox, "use_subcamera_preview", tr("&Use Loading Box"), true);
|
|
Toshihiro Shimizu |
890ddd |
separator = true;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
if (separator)
|
|
Toshihiro Shimizu |
890ddd |
m_subcamSep = m_playToolBar->addSeparator();
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
// preview BGs
|
|
Toshihiro Shimizu |
890ddd |
QActionGroup *group = new QActionGroup(m_playToolBar);
|
|
Toshihiro Shimizu |
890ddd |
if (m_gadgetsMask & eWhiteBg)
|
|
Toshihiro Shimizu |
890ddd |
createOnOffButton(eWhiteBg, "preview_white", tr("&White Background"), group);
|
|
Toshihiro Shimizu |
890ddd |
if (m_gadgetsMask & eBlackBg)
|
|
Toshihiro Shimizu |
890ddd |
createOnOffButton(eBlackBg, "preview_black", tr("&Black Background"), group);
|
|
Toshihiro Shimizu |
890ddd |
if (m_gadgetsMask & eCheckBg)
|
|
Toshihiro Shimizu |
890ddd |
createOnOffButton(eCheckBg, "preview_checkboard", tr("&Checkered Background"), group);
|
|
Toshihiro Shimizu |
890ddd |
if (m_gadgetsMask & eWhiteBg)
|
|
Toshihiro Shimizu |
890ddd |
m_bgSep = m_playToolBar->addSeparator();
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
// VCR buttons
|
|
Toshihiro Shimizu |
890ddd |
QActionGroup *playGroup = new QActionGroup(m_playToolBar);
|
|
Toshihiro Shimizu |
890ddd |
if (m_gadgetsMask & eFirst)
|
|
Toshihiro Shimizu |
890ddd |
createButton(eFirst, "framefirst", tr("&First Frame"), false);
|
|
Toshihiro Shimizu |
890ddd |
if (m_gadgetsMask & ePrev)
|
|
Toshihiro Shimizu |
890ddd |
createButton(ePrev, "frameprev", tr("&Previous Frame"), false);
|
|
Toshihiro Shimizu |
890ddd |
if (m_gadgetsMask & ePause)
|
|
Toshihiro Shimizu |
890ddd |
createCheckedButtonWithBorderImage(ePause, "pause", tr("Pause"), true, playGroup, "A_Flip_Pause");
|
|
Toshihiro Shimizu |
890ddd |
if (m_gadgetsMask & ePlay)
|
|
Toshihiro Shimizu |
890ddd |
createCheckedButtonWithBorderImage(ePlay, "play", tr("Play"), true, playGroup, "A_Flip_Play");
|
|
Toshihiro Shimizu |
890ddd |
if (m_gadgetsMask & eLoop)
|
|
Toshihiro Shimizu |
890ddd |
createCheckedButtonWithBorderImage(eLoop, "loop", tr("Loop"), true, playGroup, "A_Flip_Loop");
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
if (m_gadgetsMask & eNext)
|
|
Toshihiro Shimizu |
890ddd |
createButton(eNext, "framenext", tr("&Next frame"), false);
|
|
Toshihiro Shimizu |
890ddd |
if (m_gadgetsMask & eLast)
|
|
Toshihiro Shimizu |
890ddd |
createButton(eLast, "framelast", tr("&Last Frame"), false);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
// separator
|
|
Toshihiro Shimizu |
890ddd |
if (m_gadgetsMask & ePlay)
|
|
Toshihiro Shimizu |
890ddd |
m_vcrSep = m_playToolBar->addSeparator();
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//Channel Selector
|
|
Toshihiro Shimizu |
890ddd |
m_colorFilterGroup = new QActionGroup(m_playToolBar);
|
|
Toshihiro Shimizu |
890ddd |
m_colorFilterGroup->setExclusive(false);
|
|
Toshihiro Shimizu |
890ddd |
if ((m_gadgetsMask & eRed) && !(m_gadgetsMask & eGRed))
|
|
Toshihiro Shimizu |
890ddd |
createButton(eRed, "channelred", tr("Red Channel"), true);
|
|
Toshihiro Shimizu |
890ddd |
else if ((m_gadgetsMask & eRed) && (m_gadgetsMask & eGRed))
|
|
Toshihiro Shimizu |
890ddd |
m_doubleRedAction = createDoubleButton(eRed, eGRed, "half_R", "half_bw", tr("Red Channel"), tr("Red Channel in Grayscale"), m_colorFilterGroup, m_doubleRed);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
if ((m_gadgetsMask & eGreen) && !(m_gadgetsMask & eGGreen))
|
|
Toshihiro Shimizu |
890ddd |
createButton(eGreen, "channelgreen", tr("Green Channel"), true);
|
|
Toshihiro Shimizu |
890ddd |
else if ((m_gadgetsMask & eGreen) && (m_gadgetsMask & eGGreen))
|
|
Toshihiro Shimizu |
890ddd |
m_doubleGreenAction = createDoubleButton(eGreen, eGGreen, "half_G", "half_bw", tr("Green Channel"), tr("Green Channel in Grayscale"), m_colorFilterGroup, m_doubleGreen);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
if ((m_gadgetsMask & eBlue) && !(m_gadgetsMask & eGBlue))
|
|
Toshihiro Shimizu |
890ddd |
createButton(eBlue, "channelblue", tr("Blue Channel"), true);
|
|
Toshihiro Shimizu |
890ddd |
else if ((m_gadgetsMask & eBlue) && (m_gadgetsMask & eGBlue))
|
|
Toshihiro Shimizu |
890ddd |
m_doubleBlueAction = createDoubleButton(eBlue, eGBlue, "half_B", "half_bw", tr("Blue Channel"), tr("Blue Channel in Grayscale"), m_colorFilterGroup, m_doubleBlue);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
ret = ret && connect(m_colorFilterGroup, SIGNAL(triggered(QAction *)), this, SLOT(onButtonPressed(QAction *)));
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
if (m_gadgetsMask & eMatte)
|
|
Toshihiro Shimizu |
890ddd |
createButton(eMatte, "channelmatte", tr("Alpha Channel"), true);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
// separator
|
|
Toshihiro Shimizu |
890ddd |
if (m_gadgetsMask & eRed || m_gadgetsMask & eGRed)
|
|
Toshihiro Shimizu |
890ddd |
m_colorFilterSep = m_playToolBar->addSeparator();
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
// Sound & Histogram
|
|
Toshihiro Shimizu |
890ddd |
if (m_gadgetsMask & eSound || m_gadgetsMask & eHisto) {
|
|
Toshihiro Shimizu |
890ddd |
if (m_gadgetsMask & eSound) {
|
|
Toshihiro Shimizu |
890ddd |
createButton(eSound, "sound", tr("&Soundtrack "), true);
|
|
Toshihiro Shimizu |
890ddd |
m_soundSep = m_playToolBar->addSeparator();
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
if (m_gadgetsMask & eHisto) {
|
|
Toshihiro Shimizu |
890ddd |
createButton(eHisto, "histograms", tr("&Histogram"), false);
|
|
Toshihiro Shimizu |
890ddd |
m_histoSep = m_playToolBar->addSeparator();
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
if (m_gadgetsMask & eFilledRaster) {
|
|
Toshihiro Shimizu |
890ddd |
createOnOffButton(eFilledRaster, "preview_white", tr("&Display Areas as Filled"), 0);
|
|
Toshihiro Shimizu |
890ddd |
m_filledRasterSep = m_playToolBar->addSeparator();
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//for all actions in this toolbar
|
|
Toshihiro Shimizu |
890ddd |
ret = ret && connect(m_playToolBar, SIGNAL(actionTriggered(QAction *)), this, SLOT(onButtonPressed(QAction *)));
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
setChecked(ePause, true);
|
|
Toshihiro Shimizu |
890ddd |
setChecked(eWhiteBg, FlipBookWhiteBgToggle);
|
|
Toshihiro Shimizu |
890ddd |
setChecked(eBlackBg, FlipBookBlackBgToggle);
|
|
Toshihiro Shimizu |
890ddd |
setChecked(eCheckBg, FlipBookCheckBgToggle);
|
|
Toshihiro Shimizu |
890ddd |
assert(ret);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
void FlipConsole::enableBlanks(bool state)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
m_drawBlanksEnabled = state;
|
|
Toshihiro Shimizu |
890ddd |
m_blankColor = TPixel::Transparent;
|
|
Toshihiro Shimizu |
890ddd |
if (m_drawBlanksEnabled)
|
|
Toshihiro Shimizu |
890ddd |
Preferences::instance()->getBlankValues(m_blanksCount, m_blankColor);
|
|
Toshihiro Shimizu |
890ddd |
else {
|
|
Toshihiro Shimizu |
890ddd |
m_blanksCount = 0;
|
|
Toshihiro Shimizu |
890ddd |
m_blankColor = TPixel::Transparent;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
/*! call consoleOwner->onDrawFrame() intead of emitting drawFrame signal
|
|
Toshihiro Shimizu |
890ddd |
*/
|
|
Toshihiro Shimizu |
890ddd |
void FlipConsole::showCurrentFrame()
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
m_consoleOwner->onDrawFrame(m_currentFrame, m_settings);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
void FlipConsole::setChecked(UINT button, bool state)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
int i;
|
|
Toshihiro Shimizu |
890ddd |
if (m_playToolBar) {
|
|
Toshihiro Shimizu |
890ddd |
QObjectList objectList = m_playToolBar->children();
|
|
Toshihiro Shimizu |
890ddd |
for (i = 0; i < (int)objectList.size(); i++) {
|
|
Toshihiro Shimizu |
890ddd |
QAction *action = dynamic_cast<qaction *="">(objectList[i]);</qaction>
|
|
Toshihiro Shimizu |
890ddd |
if (!action) {
|
|
Toshihiro Shimizu |
890ddd |
QToolButton *toolButton = dynamic_cast<qtoolbutton *="">(objectList[i]);</qtoolbutton>
|
|
Toshihiro Shimizu |
890ddd |
if (!toolButton)
|
|
Toshihiro Shimizu |
890ddd |
continue;
|
|
Toshihiro Shimizu |
890ddd |
action = toolButton->defaultAction();
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
if (action && action->data().toUInt() == button) {
|
|
Toshihiro Shimizu |
890ddd |
action->setChecked(state);
|
|
Toshihiro Shimizu |
890ddd |
return;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
if (m_colorFilterGroup) {
|
|
Toshihiro Shimizu |
890ddd |
QList<qaction *=""> list = m_colorFilterGroup->actions();</qaction>
|
|
Toshihiro Shimizu |
890ddd |
for (i = 0; i < (int)list.size(); i++)
|
|
Toshihiro Shimizu |
890ddd |
if (list[i]->data().toUInt() == button) {
|
|
Toshihiro Shimizu |
890ddd |
list[i]->setChecked(state);
|
|
Toshihiro Shimizu |
890ddd |
return;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
bool FlipConsole::isChecked(UINT button) const
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
QList<qaction *=""> list;</qaction>
|
|
Toshihiro Shimizu |
890ddd |
int i;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
if (m_playToolBar) {
|
|
Toshihiro Shimizu |
890ddd |
list = m_playToolBar->actions();
|
|
Toshihiro Shimizu |
890ddd |
for (i = 0; i < (int)list.size(); i++)
|
|
Toshihiro Shimizu |
890ddd |
if (list[i]->data().toUInt() == button)
|
|
Toshihiro Shimizu |
890ddd |
return list[i]->isChecked();
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
if (m_colorFilterGroup) {
|
|
Toshihiro Shimizu |
890ddd |
list = m_colorFilterGroup->actions();
|
|
Toshihiro Shimizu |
890ddd |
for (i = 0; i < (int)list.size(); i++)
|
|
Toshihiro Shimizu |
890ddd |
if (list[i]->data().toUInt() == button)
|
|
Toshihiro Shimizu |
890ddd |
return list[i]->isChecked();
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
return false;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
void FlipConsole::pressLinkedConsoleButton(UINT button, FlipConsole *parent)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
int i;
|
|
Toshihiro Shimizu |
890ddd |
assert(parent);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
for (i = 0; i < m_visibleConsoles.size(); i++) {
|
|
Toshihiro Shimizu |
890ddd |
FlipConsole *console = m_visibleConsoles.at(i);
|
|
Toshihiro Shimizu |
890ddd |
if (console->m_isLinkable && console != parent) {
|
|
Toshihiro Shimizu |
890ddd |
console->setChecked(button, parent ? parent->isChecked(button) : true);
|
|
Toshihiro Shimizu |
890ddd |
console->doButtonPressed(button);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
void FlipConsole::onButtonPressed(int button)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
// if(!isVisible()) return;
|
|
Toshihiro Shimizu |
890ddd |
makeCurrent();
|
|
Toshihiro Shimizu |
890ddd |
doButtonPressed(button);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
if (m_areLinked)
|
|
Toshihiro Shimizu |
890ddd |
pressLinkedConsoleButton(button, this);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
void FlipConsole::pressButton(EGadget buttonId)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
if (m_buttons.contains(buttonId)) {
|
|
Toshihiro Shimizu |
890ddd |
//If you press "play" or "loop play" button while playing, which means "pause"
|
|
Toshihiro Shimizu |
890ddd |
if (m_playbackExecutor.isRunning() && (buttonId == ePlay || buttonId == eLoop)) {
|
|
Toshihiro Shimizu |
890ddd |
m_buttons[ePause]->click();
|
|
Toshihiro Shimizu |
890ddd |
return;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
m_buttons[buttonId]->click();
|
|
Toshihiro Shimizu |
890ddd |
} else if (m_actions.contains(buttonId))
|
|
Toshihiro Shimizu |
890ddd |
m_actions[buttonId]->trigger();
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
void FlipConsole::onLoadBox(bool isDefine)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
int shrink, dummy;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
Preferences::instance()->getViewValues(shrink, dummy);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
if (shrink != 1) {
|
|
Toshihiro Shimizu |
890ddd |
#ifdef WIN32
|
|
Toshihiro Shimizu |
890ddd |
MessageBox(0, "Cannot use loading box with a shrink factor! ", "Warning", MB_OK);
|
|
Toshihiro Shimizu |
890ddd |
#endif
|
|
Toshihiro Shimizu |
890ddd |
setChecked(eUseLoadBox, false);
|
|
Toshihiro Shimizu |
890ddd |
setChecked(eDefineLoadBox, false);
|
|
Toshihiro Shimizu |
890ddd |
m_settings.m_useLoadbox = m_settings.m_defineLoadbox = false;
|
|
Toshihiro Shimizu |
890ddd |
return;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
if (isDefine)
|
|
Toshihiro Shimizu |
890ddd |
m_settings.m_defineLoadbox = !m_settings.m_defineLoadbox;
|
|
Toshihiro Shimizu |
890ddd |
else
|
|
Toshihiro Shimizu |
890ddd |
m_settings.m_useLoadbox = !m_settings.m_useLoadbox;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
if (m_settings.m_defineLoadbox && m_settings.m_useLoadbox) {
|
|
Toshihiro Shimizu |
890ddd |
setChecked(isDefine ? eUseLoadBox : eDefineLoadBox, false);
|
|
Toshihiro Shimizu |
890ddd |
if (isDefine)
|
|
Toshihiro Shimizu |
890ddd |
m_settings.m_useLoadbox = false;
|
|
Toshihiro Shimizu |
890ddd |
else
|
|
Toshihiro Shimizu |
890ddd |
m_settings.m_defineLoadbox = false;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
m_consoleOwner->onDrawFrame(m_currentFrame, m_settings);
|
|
Toshihiro Shimizu |
890ddd |
return;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
void FlipConsole::doButtonPressed(UINT button)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
emit buttonPressed((FlipConsole::EGadget)button);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
int from = m_from, to = m_to;
|
|
Toshihiro Shimizu |
890ddd |
// When the level editing mode, ignore the preview frame range marker
|
|
Toshihiro Shimizu |
890ddd |
if (m_markerFrom <= m_markerTo && m_frameHandle && m_frameHandle->isEditingScene())
|
|
Toshihiro Shimizu |
890ddd |
from = m_markerFrom, to = m_markerTo;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
bool linked = m_areLinked && m_isLinkable;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
switch (button) {
|
|
Toshihiro Shimizu |
890ddd |
case eFirst:
|
|
Toshihiro Shimizu |
890ddd |
m_currentFrame = from;
|
|
Toshihiro Shimizu |
890ddd |
CASE ePrev : m_currentFrame = (m_currentFrame - m_step < from) ? from : m_currentFrame - m_step;
|
|
Toshihiro Shimizu |
890ddd |
CASE eNext : m_currentFrame = (m_currentFrame + m_step > to) ? to : m_currentFrame + m_step;
|
|
Toshihiro Shimizu |
890ddd |
CASE eLast : m_currentFrame = to;
|
|
Toshihiro Shimizu |
890ddd |
CASE ePlay : __OR eLoop:
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
//if ( isChecked(ePlay, false);
|
|
Toshihiro Shimizu |
890ddd |
//setChecked(eLoop, false);
|
|
Toshihiro Shimizu |
890ddd |
m_editCurrFrame->disconnect();
|
|
Toshihiro Shimizu |
890ddd |
m_currFrameSlider->disconnect();
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
m_isPlay = (button == ePlay);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
if (linked && m_isLinkedPlaying)
|
|
Toshihiro Shimizu |
890ddd |
return;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
if ((m_fps == 0 || m_framesCount == 0) && m_playbackExecutor.isRunning()) {
|
|
Toshihiro Shimizu |
890ddd |
doButtonPressed(ePause);
|
|
Toshihiro Shimizu |
890ddd |
if (m_fpsLabel)
|
|
Toshihiro Shimizu |
890ddd |
m_fpsLabel->setText(tr(" FPS ") + QString::number(m_fps));
|
|
Toshihiro Shimizu |
890ddd |
if (m_fpsField)
|
|
Toshihiro Shimizu |
890ddd |
m_fpsField->setLineEditBackgroundColor(Qt::transparent);
|
|
Toshihiro Shimizu |
890ddd |
return;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
if (m_fpsLabel)
|
|
Toshihiro Shimizu |
890ddd |
m_fpsLabel->setText(tr(" FPS ") + "/");
|
|
Toshihiro Shimizu |
890ddd |
if (m_fpsField)
|
|
Toshihiro Shimizu |
890ddd |
m_fpsField->setLineEditBackgroundColor(Qt::red);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
m_playbackExecutor.resetFps(m_fps);
|
|
Toshihiro Shimizu |
890ddd |
if (!m_playbackExecutor.isRunning())
|
|
Toshihiro Shimizu |
890ddd |
m_playbackExecutor.start();
|
|
Toshihiro Shimizu |
890ddd |
m_isLinkedPlaying = linked;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
m_reverse = (m_fps < 0);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
if (!linked) {
|
|
Toshihiro Shimizu |
890ddd |
//if the play button pressed at the end frame, then go back to the start frame and play
|
|
Toshihiro Shimizu |
890ddd |
if (m_currentFrame <= from || m_currentFrame >= to) //the first frame of the playback is drawn right now
|
|
Toshihiro Shimizu |
890ddd |
m_currentFrame = m_reverse ? to : from;
|
|
Toshihiro Shimizu |
890ddd |
m_settings.m_recomputeIfNeeded = true;
|
|
Toshihiro Shimizu |
890ddd |
m_consoleOwner->onDrawFrame(m_currentFrame, m_settings);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
emit playStateChanged(true);
|
|
Toshihiro Shimizu |
890ddd |
return;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
CASE ePause : m_isLinkedPlaying = false;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
if (m_playbackExecutor.isRunning())
|
|
Toshihiro Shimizu |
890ddd |
m_playbackExecutor.abort();
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
m_isPlay = false;
|
|
Toshihiro Shimizu |
890ddd |
m_blanksToDraw = 0;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
m_consoleOwner->swapBuffers();
|
|
Toshihiro Shimizu |
890ddd |
m_consoleOwner->changeSwapBehavior(true);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
if (m_settings.m_blankColor != TPixel::Transparent) {
|
|
Toshihiro Shimizu |
890ddd |
m_settings.m_blankColor = TPixel::Transparent;
|
|
Toshihiro Shimizu |
890ddd |
m_settings.m_recomputeIfNeeded = true;
|
|
Toshihiro Shimizu |
890ddd |
m_consoleOwner->onDrawFrame(m_currentFrame, m_settings);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
if (m_fpsLabel)
|
|
Toshihiro Shimizu |
890ddd |
m_fpsLabel->setText(tr(" FPS "));
|
|
Toshihiro Shimizu |
890ddd |
if (m_fpsField)
|
|
Toshihiro Shimizu |
890ddd |
m_fpsField->setLineEditBackgroundColor(Qt::transparent);
|
|
Toshihiro Shimizu |
890ddd |
//setChecked(ePlay, false);
|
|
Toshihiro Shimizu |
890ddd |
//setChecked(eLoop, false);
|
|
Toshihiro Shimizu |
890ddd |
connect(m_editCurrFrame, SIGNAL(editingFinished()), this, SLOT(OnSetCurrentFrame()));
|
|
Toshihiro Shimizu |
890ddd |
connect(m_currFrameSlider, SIGNAL(flipSliderReleased()), this, SLOT(OnFrameSliderRelease()));
|
|
Toshihiro Shimizu |
890ddd |
connect(m_currFrameSlider, SIGNAL(flipSliderPressed()), this, SLOT(OnFrameSliderPress()));
|
|
Toshihiro Shimizu |
890ddd |
connect(m_currFrameSlider, SIGNAL(valueChanged(int)), this, SLOT(OnSetCurrentFrame(int)));
|
|
Toshihiro Shimizu |
890ddd |
connect(m_currFrameSlider, SIGNAL(flipSliderReleased()), this, SLOT(onSliderRelease()));
|
|
Toshihiro Shimizu |
890ddd |
emit playStateChanged(false);
|
|
Toshihiro Shimizu |
890ddd |
return;
|
|
Toshihiro Shimizu |
890ddd |
/*CASE eMatte:
|
|
Toshihiro Shimizu |
890ddd |
if (isChecked(eMatte))
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
//setChecked(eRed, false);
|
|
Toshihiro Shimizu |
890ddd |
//setChecked(eGreen, false);
|
|
Toshihiro Shimizu |
890ddd |
//setChecked(eBlue, false);
|
|
Toshihiro Shimizu |
890ddd |
setChecked(eGRed, false);
|
|
Toshihiro Shimizu |
890ddd |
setChecked(eGGreen, false);
|
|
Toshihiro Shimizu |
890ddd |
setChecked(eGBlue, false);
|
|
Toshihiro Shimizu |
890ddd |
m_settings.m_colorMask = TRop::MChan;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
else
|
|
Toshihiro Shimizu |
890ddd |
m_settings.m_colorMask = 0;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
if (m_doubleRed)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
m_doubleRed->update();
|
|
Toshihiro Shimizu |
890ddd |
m_doubleGreen->update();
|
|
Toshihiro Shimizu |
890ddd |
m_doubleBlue->update();
|
|
Toshihiro Shimizu |
890ddd |
}*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
CASE eGRed : __OR eGGreen : __OR eGBlue : __OR eRed : __OR eGreen : __OR eBlue : __OR eMatte:
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
if (button != eGRed)
|
|
Toshihiro Shimizu |
890ddd |
setChecked(eGRed, false);
|
|
Toshihiro Shimizu |
890ddd |
if (button != eGGreen)
|
|
Toshihiro Shimizu |
890ddd |
setChecked(eGGreen, false);
|
|
Toshihiro Shimizu |
890ddd |
if (button != eGBlue)
|
|
Toshihiro Shimizu |
890ddd |
setChecked(eGBlue, false);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
if (button == eGRed || button == eGGreen || button == eGBlue) {
|
|
Toshihiro Shimizu |
890ddd |
m_settings.m_greytones = isChecked(button);
|
|
Toshihiro Shimizu |
890ddd |
setChecked(eRed, false);
|
|
Toshihiro Shimizu |
890ddd |
setChecked(eGreen, false);
|
|
Toshihiro Shimizu |
890ddd |
setChecked(eBlue, false);
|
|
Toshihiro Shimizu |
890ddd |
setChecked(eMatte, false);
|
|
Toshihiro Shimizu |
890ddd |
} else
|
|
Toshihiro Shimizu |
890ddd |
m_settings.m_greytones = false;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
if (m_doubleRed) {
|
|
Toshihiro Shimizu |
890ddd |
m_doubleRed->update();
|
|
Toshihiro Shimizu |
890ddd |
m_doubleGreen->update();
|
|
Toshihiro Shimizu |
890ddd |
m_doubleBlue->update();
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
int colorMask = 0;
|
|
Toshihiro Shimizu |
890ddd |
if (isChecked(eRed) || isChecked(eGRed))
|
|
Toshihiro Shimizu |
890ddd |
colorMask = colorMask | TRop::RChan;
|
|
Toshihiro Shimizu |
890ddd |
if (isChecked(eGreen) || isChecked(eGGreen))
|
|
Toshihiro Shimizu |
890ddd |
colorMask = colorMask | TRop::GChan;
|
|
Toshihiro Shimizu |
890ddd |
if (isChecked(eBlue) || isChecked(eGBlue))
|
|
Toshihiro Shimizu |
890ddd |
colorMask = colorMask | TRop::BChan;
|
|
Toshihiro Shimizu |
890ddd |
if (isChecked(eMatte))
|
|
Toshihiro Shimizu |
890ddd |
colorMask = colorMask | TRop::MChan;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
if (colorMask == (TRop::RChan | TRop::GChan | TRop::BChan) ||
|
|
Toshihiro Shimizu |
890ddd |
colorMask == (TRop::RChan | TRop::GChan | TRop::BChan | TRop::MChan))
|
|
Toshihiro Shimizu |
890ddd |
m_settings.m_colorMask = 0;
|
|
Toshihiro Shimizu |
890ddd |
else
|
|
Toshihiro Shimizu |
890ddd |
m_settings.m_colorMask = colorMask;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
CASE eSound :
|
|
Toshihiro Shimizu |
890ddd |
//emit soundEnabled(isChecked(eSound));
|
|
Toshihiro Shimizu |
890ddd |
CASE eWhiteBg : __OR eBlackBg : __OR eCheckBg : m_settings.m_bg = (EGadget)button;
|
|
Toshihiro Shimizu |
890ddd |
FlipBookWhiteBgToggle = isChecked(eWhiteBg);
|
|
Toshihiro Shimizu |
890ddd |
FlipBookBlackBgToggle = isChecked(eBlackBg);
|
|
Toshihiro Shimizu |
890ddd |
FlipBookCheckBgToggle = isChecked(eCheckBg);
|
|
Toshihiro Shimizu |
890ddd |
CASE FlipConsole::eCompare : m_settings.m_doCompare = !m_settings.m_doCompare;
|
|
Toshihiro Shimizu |
890ddd |
CASE eHisto : CASE eSaveImg : CASE eSave :
|
|
Toshihiro Shimizu |
890ddd |
//nothing to do
|
|
Toshihiro Shimizu |
890ddd |
return;
|
|
Toshihiro Shimizu |
890ddd |
CASE eDefineSubCamera :
|
|
Toshihiro Shimizu |
890ddd |
//nothing to do
|
|
Toshihiro Shimizu |
890ddd |
return;
|
|
Toshihiro Shimizu |
890ddd |
CASE eDefineLoadBox : onLoadBox(true);
|
|
Toshihiro Shimizu |
890ddd |
CASE eUseLoadBox : onLoadBox(false);
|
|
Toshihiro Shimizu |
890ddd |
CASE eFilledRaster : return;
|
|
Toshihiro Shimizu |
890ddd |
DEFAULT:
|
|
Toshihiro Shimizu |
890ddd |
assert(false);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
m_currFrameSlider->setValue(m_currentFrame);
|
|
Toshihiro Shimizu |
890ddd |
m_editCurrFrame->setText(QString::number(m_currentFrame));
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
m_consoleOwner->onDrawFrame(m_currentFrame, m_settings);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//--------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
QFrame *FlipConsole::createFrameSlider()
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
QFrame *frameSliderFrame = new QFrame(this);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
m_editCurrFrame = new IntLineEdit(frameSliderFrame, m_currentFrame);
|
|
Toshihiro Shimizu |
890ddd |
m_editCurrFrame->setToolTip(tr("Set the current frame"));
|
|
Toshihiro Shimizu |
890ddd |
m_editCurrFrame->setFixedWidth(40);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
m_currFrameSlider = new FlipSlider(frameSliderFrame);
|
|
Toshihiro Shimizu |
890ddd |
m_currFrameSlider->setToolTip(tr("Drag to play the animation"));
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
m_currFrameSlider->setRange(0, 0);
|
|
Toshihiro Shimizu |
890ddd |
m_currFrameSlider->setValue(0);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
if (m_drawBlanksEnabled) {
|
|
Toshihiro Shimizu |
890ddd |
m_enableBlankFrameButton = new QPushButton(this);
|
|
Toshihiro Shimizu |
890ddd |
m_enableBlankFrameButton->setCheckable(true);
|
|
Toshihiro Shimizu |
890ddd |
m_enableBlankFrameButton->setChecked(true);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
m_enableBlankFrameButton->setFixedHeight(24);
|
|
Toshihiro Shimizu |
890ddd |
m_enableBlankFrameButton->setFixedWidth(66);
|
|
Toshihiro Shimizu |
890ddd |
m_enableBlankFrameButton->setObjectName("enableBlankFrameButton");
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//layout
|
|
Toshihiro Shimizu |
890ddd |
QHBoxLayout *frameSliderLayout = new QHBoxLayout();
|
|
Toshihiro Shimizu |
890ddd |
frameSliderLayout->setSpacing(5);
|
|
Toshihiro Shimizu |
890ddd |
frameSliderLayout->setMargin(2);
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
frameSliderLayout->addWidget(m_editCurrFrame, 0);
|
|
Toshihiro Shimizu |
890ddd |
frameSliderLayout->addWidget(m_currFrameSlider, 1);
|
|
Toshihiro Shimizu |
890ddd |
if (m_drawBlanksEnabled)
|
|
Toshihiro Shimizu |
890ddd |
frameSliderLayout->addWidget(m_enableBlankFrameButton, 0);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
frameSliderFrame->setLayout(frameSliderLayout);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
connect(m_editCurrFrame, SIGNAL(editingFinished()),
|
|
Toshihiro Shimizu |
890ddd |
this, SLOT(OnSetCurrentFrame()));
|
|
Toshihiro Shimizu |
890ddd |
connect(m_currFrameSlider, SIGNAL(valueChanged(int)),
|
|
Toshihiro Shimizu |
890ddd |
this, SLOT(OnSetCurrentFrame(int)));
|
|
Toshihiro Shimizu |
890ddd |
connect(m_currFrameSlider, SIGNAL(flipSliderReleased()),
|
|
Toshihiro Shimizu |
890ddd |
this, SLOT(OnFrameSliderRelease()));
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
return frameSliderFrame;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//--------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
QFrame *FlipConsole::createFpsSlider()
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
QFrame *fpsSliderFrame = new QFrame(this);
|
|
Toshihiro Shimizu |
890ddd |
//frame per second
|
|
Toshihiro Shimizu |
890ddd |
m_fpsLabel = new QLabel(QString(" FPS -- /"), fpsSliderFrame);
|
|
Toshihiro Shimizu |
890ddd |
m_fpsSlider = new QScrollBar(Qt::Horizontal, fpsSliderFrame);
|
|
Toshihiro Shimizu |
890ddd |
m_fpsField = new IntLineEdit(fpsSliderFrame, m_fps, -60, 60);
|
|
Toshihiro Shimizu |
890ddd |
m_fpsField->setFixedWidth(40);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
m_fpsLabel->setMinimumWidth(m_fpsLabel->fontMetrics().width("_FPS_24___"));
|
|
Toshihiro Shimizu |
890ddd |
m_fpsLabel->setAlignment(Qt::AlignRight | Qt::AlignVCenter);
|
|
Toshihiro Shimizu |
890ddd |
m_fpsSlider->setObjectName("ViewerFpsSlider");
|
|
Toshihiro Shimizu |
890ddd |
m_fpsSlider->setRange(-60, 60);
|
|
Toshihiro Shimizu |
890ddd |
m_fpsSlider->setValue(m_fps);
|
|
Toshihiro Shimizu |
890ddd |
m_fpsSlider->setToolTip(tr("Set the playback frame rate"));
|
|
Toshihiro Shimizu |
890ddd |
m_fpsSlider->setContextMenuPolicy(Qt::NoContextMenu);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
QHBoxLayout *hLay = new QHBoxLayout();
|
|
Toshihiro Shimizu |
890ddd |
hLay->setSpacing(0);
|
|
Toshihiro Shimizu |
890ddd |
hLay->setMargin(0);
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
hLay->addWidget(m_fpsLabel, 0);
|
|
Toshihiro Shimizu |
890ddd |
hLay->addWidget(m_fpsField, 0);
|
|
Toshihiro Shimizu |
890ddd |
hLay->addWidget(m_fpsSlider, 1);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
fpsSliderFrame->setLayout(hLay);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
connect(m_fpsSlider, SIGNAL(valueChanged(int)), this, SLOT(setCurrentFPS(int)));
|
|
Toshihiro Shimizu |
890ddd |
connect(m_fpsField, SIGNAL(editingFinished()), this, SLOT(onFPSEdited()));
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
return fpsSliderFrame;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//--------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
void FlipConsole::onFPSEdited(void)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
// this will emit fpsSlider->ValueChanged as well
|
|
Toshihiro Shimizu |
890ddd |
m_fpsSlider->setValue(m_fpsField->getValue());
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//--------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
void FlipConsole::setFrameRange(int from, int to, int step, int current)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
if (from != m_from || to != m_to || step != m_step) {
|
|
Toshihiro Shimizu |
890ddd |
m_from = from;
|
|
Toshihiro Shimizu |
890ddd |
m_to = to;
|
|
Toshihiro Shimizu |
890ddd |
m_step = step;
|
|
Toshihiro Shimizu |
890ddd |
m_to -= (m_to - m_from) % m_step;
|
|
Toshihiro Shimizu |
890ddd |
m_framesCount = (m_to - m_from) / m_step + 1;
|
|
Toshihiro Shimizu |
890ddd |
m_currFrameSlider->blockSignals(true);
|
|
Toshihiro Shimizu |
890ddd |
//m_currFrameSlider->setRange(0, m_framesCount-1);
|
|
Toshihiro Shimizu |
890ddd |
m_currFrameSlider->setRange(m_from, m_to);
|
|
Toshihiro Shimizu |
890ddd |
m_currFrameSlider->setSingleStep(m_step);
|
|
Toshihiro Shimizu |
890ddd |
m_currFrameSlider->blockSignals(false);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
if (m_playbackExecutor.isRunning() || m_isLinkedPlaying) //if in playing mode, the slider and the frame field are already set in the timer!
|
|
Toshihiro Shimizu |
890ddd |
return;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
// limit the current frame in the range from-to
|
|
Toshihiro Shimizu |
890ddd |
if (current < from)
|
|
Toshihiro Shimizu |
890ddd |
current = from;
|
|
Toshihiro Shimizu |
890ddd |
else if (current > to)
|
|
Toshihiro Shimizu |
890ddd |
current = to;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
m_currFrameSlider->blockSignals(true);
|
|
Toshihiro Shimizu |
890ddd |
setCurrentFrame(current);
|
|
Toshihiro Shimizu |
890ddd |
m_currFrameSlider->blockSignals(false);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//--------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
void FlipConsole::incrementCurrentFrame(int delta)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
m_currentFrame = m_currentFrame + delta;
|
|
Toshihiro Shimizu |
890ddd |
if (m_currentFrame < m_from)
|
|
Toshihiro Shimizu |
890ddd |
m_currentFrame += m_to - m_from + 1;
|
|
Toshihiro Shimizu |
890ddd |
else if (m_currentFrame > m_to)
|
|
Toshihiro Shimizu |
890ddd |
m_currentFrame -= m_to - m_from + 1;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
m_editCurrFrame->setText(QString::number(m_currentFrame));
|
|
Toshihiro Shimizu |
890ddd |
m_currFrameSlider->setValue(m_currentFrame);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
m_consoleOwner->onDrawFrame(m_currentFrame, m_settings);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//--------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
void FlipConsole::OnSetCurrentFrame()
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
int newFrame = m_editCurrFrame->text().toInt();
|
|
Toshihiro Shimizu |
890ddd |
if (m_step > 1) {
|
|
Toshihiro Shimizu |
890ddd |
newFrame -= ((newFrame - m_from) % m_step);
|
|
Toshihiro Shimizu |
890ddd |
m_editCurrFrame->setText(QString::number(newFrame));
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
int i, deltaFrame = newFrame - m_currentFrame;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
if (m_framesCount == 0)
|
|
Toshihiro Shimizu |
890ddd |
m_editCurrFrame->setText(QString::number(1));
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
if (m_framesCount == 0 || newFrame == m_currentFrame || newFrame == 0)
|
|
Toshihiro Shimizu |
890ddd |
return;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
if (newFrame > m_to) {
|
|
Toshihiro Shimizu |
890ddd |
m_editCurrFrame->setText(QString::number(m_currentFrame));
|
|
Toshihiro Shimizu |
890ddd |
return;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
m_currentFrame = newFrame;
|
|
Toshihiro Shimizu |
890ddd |
m_currFrameSlider->setValue(m_currentFrame);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
m_consoleOwner->onDrawFrame(m_currentFrame, m_settings);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
if (m_areLinked)
|
|
Toshihiro Shimizu |
890ddd |
for (i = 0; i < m_visibleConsoles.size(); i++) {
|
|
Toshihiro Shimizu |
890ddd |
FlipConsole *console = m_visibleConsoles.at(i);
|
|
Toshihiro Shimizu |
890ddd |
if (console->m_isLinkable && console != this)
|
|
Toshihiro Shimizu |
890ddd |
console->incrementCurrentFrame(deltaFrame);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//--------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
void FlipConsole::onSliderRelease()
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
emit sliderReleased();
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//--------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
void FlipConsole::OnFrameSliderRelease()
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
m_settings.m_recomputeIfNeeded = true;
|
|
Toshihiro Shimizu |
890ddd |
m_currentFrame = -1;
|
|
Toshihiro Shimizu |
890ddd |
OnSetCurrentFrame();
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
void FlipConsole::OnFrameSliderPress()
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
m_settings.m_recomputeIfNeeded = false;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//---------------------
|
|
Toshihiro Shimizu |
890ddd |
//----------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
void FlipConsole::OnSetCurrentFrame(int index)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
if (m_framesCount == 0)
|
|
Toshihiro Shimizu |
890ddd |
return;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
if (index == m_currentFrame)
|
|
Toshihiro Shimizu |
890ddd |
return;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
int deltaFrame = index - m_currentFrame;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
m_currentFrame = index;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
assert(m_currentFrame <= m_to);
|
|
Toshihiro Shimizu |
890ddd |
m_editCurrFrame->setText(QString::number(m_currentFrame));
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
m_consoleOwner->onDrawFrame(m_currentFrame, m_settings);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
if (m_areLinked)
|
|
Toshihiro Shimizu |
890ddd |
for (int i = 0; i < m_visibleConsoles.size(); i++) {
|
|
Toshihiro Shimizu |
890ddd |
FlipConsole *console = m_visibleConsoles.at(i);
|
|
Toshihiro Shimizu |
890ddd |
if (console->m_isLinkable && console != this)
|
|
Toshihiro Shimizu |
890ddd |
console->incrementCurrentFrame(deltaFrame);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//--------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
void FlipConsole::setCurrentFrame(int frame, bool forceResetting)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
m_currentFrame = (frame == -1) ? m_from : frame;
|
|
Toshihiro Shimizu |
890ddd |
if ((m_playbackExecutor.isRunning() || m_isLinkedPlaying) && !forceResetting) //if in playing mode, the slider and the frame field are already set in the timer!
|
|
Toshihiro Shimizu |
890ddd |
return;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
m_editCurrFrame->setValue(m_currentFrame);
|
|
Toshihiro Shimizu |
890ddd |
m_currFrameSlider->setValue(m_currentFrame);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//--------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
void FlipConsole::enableProgressBar(bool enable)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
m_currFrameSlider->setProgressBarEnabled(enable);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//--------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
void FlipConsole::setProgressBarStatus(const std::vector<uchar> *pbStatus)</uchar>
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
m_currFrameSlider->setProgressBarStatus(pbStatus);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//--------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
const std::vector<uchar> *FlipConsole::getProgressBarStatus() const</uchar>
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
return m_currFrameSlider->getProgressBarStatus();
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//--------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
void FlipConsole::onPreferenceChanged()
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
if (m_drawBlanksEnabled) {
|
|
Toshihiro Shimizu |
890ddd |
Preferences::instance()->getBlankValues(m_blanksCount, m_blankColor);
|
|
Toshihiro Shimizu |
890ddd |
if (m_blanksCount == 0) {
|
|
Toshihiro Shimizu |
890ddd |
if (m_enableBlankFrameButton->isVisible())
|
|
Toshihiro Shimizu |
890ddd |
m_enableBlankFrameButton->hide();
|
|
Toshihiro Shimizu |
890ddd |
} else {
|
|
Toshihiro Shimizu |
890ddd |
if (m_enableBlankFrameButton->isHidden())
|
|
Toshihiro Shimizu |
890ddd |
m_enableBlankFrameButton->show();
|
|
Toshihiro Shimizu |
890ddd |
QString buttonText = QString("+%1 Blank").arg(m_blanksCount);
|
|
Toshihiro Shimizu |
890ddd |
if (m_blanksCount > 1)
|
|
Toshihiro Shimizu |
890ddd |
buttonText += "s";
|
|
Toshihiro Shimizu |
890ddd |
m_enableBlankFrameButton->setText(buttonText);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//--- use white text for dark color and vice versa
|
|
Toshihiro Shimizu |
890ddd |
QString textColor;
|
|
Toshihiro Shimizu |
890ddd |
QString dimmedTextColor;
|
|
Toshihiro Shimizu |
890ddd |
int val = (int)m_blankColor.r * 30 +
|
|
Toshihiro Shimizu |
890ddd |
(int)m_blankColor.g * 59 +
|
|
Toshihiro Shimizu |
890ddd |
(int)m_blankColor.b * 11;
|
|
Toshihiro Shimizu |
890ddd |
if (val < 12800) {
|
|
Toshihiro Shimizu |
890ddd |
textColor = QString("white");
|
|
Toshihiro Shimizu |
890ddd |
dimmedTextColor = QString("rgb(200,200,200)");
|
|
Toshihiro Shimizu |
890ddd |
} else {
|
|
Toshihiro Shimizu |
890ddd |
textColor = QString("black");
|
|
Toshihiro Shimizu |
890ddd |
dimmedTextColor = QString("rgb(55,55,55)");
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
int dc = 150;
|
|
Toshihiro Shimizu |
890ddd |
QColor lightBevel(tmin(m_blankColor.r + dc, 255),
|
|
Toshihiro Shimizu |
890ddd |
tmin(m_blankColor.g + dc, 255),
|
|
Toshihiro Shimizu |
890ddd |
tmin(m_blankColor.b + dc, 255));
|
|
Toshihiro Shimizu |
890ddd |
QColor darkBevel(tmax(m_blankColor.r - dc, 0),
|
|
Toshihiro Shimizu |
890ddd |
tmax(m_blankColor.g - dc, 0),
|
|
Toshihiro Shimizu |
890ddd |
tmax(m_blankColor.b - dc, 0));
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
m_enableBlankFrameButton->setStyleSheet(
|
|
Toshihiro Shimizu |
890ddd |
QString("#enableBlankFrameButton{ \
|
|
Toshihiro Shimizu |
890ddd |
background-color: transparent; \
|
|
Toshihiro Shimizu |
890ddd |
padding: 2px;\
|
|
Toshihiro Shimizu |
890ddd |
font-weight: bold; \
|
|
Toshihiro Shimizu |
890ddd |
font-size: 12px; \
|
|
Toshihiro Shimizu |
890ddd |
color: %11;\
|
|
Toshihiro Shimizu |
890ddd |
border-style: inset; \
|
|
Toshihiro Shimizu |
890ddd |
border-left-color: rgb(%5,%6,%7); \
|
|
Toshihiro Shimizu |
890ddd |
border-top-color: rgb(%5,%6,%7); \
|
|
Toshihiro Shimizu |
890ddd |
border-right-color: rgb(%8,%9,%10); \
|
|
Toshihiro Shimizu |
890ddd |
border-bottom-color: rgb(%8,%9,%10); \
|
|
Toshihiro Shimizu |
890ddd |
border-width: 2px; \
|
|
Toshihiro Shimizu |
890ddd |
border-radius: 3px; \
|
|
Toshihiro Shimizu |
890ddd |
} \
|
|
Toshihiro Shimizu |
890ddd |
#enableBlankFrameButton:checked { \
|
|
Toshihiro Shimizu |
890ddd |
background-color: rgb(%1,%2,%3); \
|
|
Toshihiro Shimizu |
890ddd |
color: %4; \
|
|
Toshihiro Shimizu |
890ddd |
border-style: outset; \
|
|
Toshihiro Shimizu |
890ddd |
border-left-color: rgb(%8,%9,%10); \
|
|
Toshihiro Shimizu |
890ddd |
border-top-color: rgb(%8,%9,%10); \
|
|
Toshihiro Shimizu |
890ddd |
border-right-color: rgb(%5,%6,%7); \
|
|
Toshihiro Shimizu |
890ddd |
border-bottom-color: rgb(%5,%6,%7); \
|
|
Toshihiro Shimizu |
890ddd |
} ")
|
|
Toshihiro Shimizu |
890ddd |
.arg(m_blankColor.r)
|
|
Toshihiro Shimizu |
890ddd |
.arg(m_blankColor.g)
|
|
Toshihiro Shimizu |
890ddd |
.arg(m_blankColor.b)
|
|
Toshihiro Shimizu |
890ddd |
.arg(textColor)
|
|
Toshihiro Shimizu |
890ddd |
.arg(lightBevel.red())
|
|
Toshihiro Shimizu |
890ddd |
.arg(lightBevel.green())
|
|
Toshihiro Shimizu |
890ddd |
.arg(lightBevel.blue())
|
|
Toshihiro Shimizu |
890ddd |
.arg(darkBevel.red())
|
|
Toshihiro Shimizu |
890ddd |
.arg(darkBevel.green())
|
|
Toshihiro Shimizu |
890ddd |
.arg(darkBevel.blue())
|
|
Toshihiro Shimizu |
890ddd |
.arg(dimmedTextColor));
|
|
Toshihiro Shimizu |
890ddd |
m_enableBlankFrameButton->update();
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//====================================================================
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
class FlipConsoleActionsCreator : AuxActionsCreator
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
void createToggleAction(
|
|
Toshihiro Shimizu |
890ddd |
QObject *parent,
|
|
Toshihiro Shimizu |
890ddd |
const char *cmdId,
|
|
Toshihiro Shimizu |
890ddd |
const char *name,
|
|
Toshihiro Shimizu |
890ddd |
int buttonId)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
QAction *action = new QAction(name, parent);
|
|
Toshihiro Shimizu |
890ddd |
action->setData(QVariant(buttonId));
|
|
Toshihiro Shimizu |
890ddd |
CommandManager::instance()->define(cmdId, MiscCommandType, "", action);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
public:
|
|
Toshihiro Shimizu |
890ddd |
void createActions(QObject *parent)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
/*createToggleAction(parent, "A_Flip_Play", "Play", FlipConsole::ePlay);
|
|
Toshihiro Shimizu |
890ddd |
createToggleAction(parent, "A_Flip_Pause", "Pause", FlipConsole::ePause);
|
|
Toshihiro Shimizu |
890ddd |
createToggleAction(parent, "A_Flip_Loop", "Loop", FlipConsole::eLoop);*/
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
} flipConsoleActionsCreator;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//--------------------------------------------------------------------
|