20 #include "timecontrols.h"
22 #include "playbackmanager.h"
23 #include "layermanager.h"
24 #include "pencildef.h"
26 #include "preferencemanager.h"
30 TimeControls::TimeControls(
TimeLine *parent ) : QToolBar( parent )
32 QSettings settings( PENCIL2D, PENCIL2D );
34 mFpsBox =
new QSpinBox();
35 mFpsBox->setFont( QFont(
"Helvetica", 10) );
36 mFpsBox->setFixedHeight(24);
37 mFpsBox->setValue(settings.value(
"fps").toInt());
38 mFpsBox->setMinimum(1);
39 mFpsBox->setMaximum(90);
40 mFpsBox->setSuffix(
" fps");
41 mFpsBox->setToolTip( tr(
"Frames per second") );
42 mFpsBox->setFocusPolicy(Qt::WheelFocus);
44 mLoopStartSpinBox =
new QSpinBox();
45 mLoopStartSpinBox->setFont( QFont(
"Helvetica", 10) );
46 mLoopStartSpinBox->setFixedHeight(24);
47 mLoopStartSpinBox->setValue(settings.value(
"loopStart").toInt());
48 mLoopStartSpinBox->setMinimum(1);
49 mLoopStartSpinBox->setMaximum(parent->getFrameLength() - 1);
50 mLoopStartSpinBox->setToolTip(tr(
"Start of playback loop"));
51 mLoopStartSpinBox->setFocusPolicy(Qt::WheelFocus);
53 mLoopEndSpinBox=
new QSpinBox();
54 mLoopEndSpinBox->setFont( QFont(
"Helvetica", 10) );
55 mLoopEndSpinBox->setFixedHeight(24);
56 mLoopEndSpinBox->setValue( settings.value(
"loopEnd" ).toInt() );
57 mLoopEndSpinBox->setMinimum(mLoopStartSpinBox->value() + 1);
58 mLoopEndSpinBox->setMaximum(parent->getFrameLength());
59 mLoopEndSpinBox->setToolTip(tr(
"End of playback loop"));
60 mLoopEndSpinBox->setFocusPolicy(Qt::WheelFocus);
62 mPlaybackRangeCheckBox =
new QCheckBox( tr(
"Range") );
63 mPlaybackRangeCheckBox->setFont( QFont(
"Helvetica", 10) );
64 mPlaybackRangeCheckBox->setFixedHeight(24);
65 mPlaybackRangeCheckBox->setToolTip(tr(
"Playback range"));
67 mPlayButton =
new QPushButton(
this );
68 mLoopButton =
new QPushButton();
69 mSoundButton =
new QPushButton();
70 mJumpToEndButton=
new QPushButton();
71 mJumpToStartButton=
new QPushButton();
73 mLoopIcon = QIcon(
":icons/controls/loop.png");
74 mSoundIcon = QIcon(
":icons/controls/sound.png");
75 mJumpToEndIcon = QIcon(
":icons/controls/endplay.png");
76 mJumpToStartIcon = QIcon(
":icons/controls/startplay.png");
77 mStartIcon = QIcon(
":icons/controls/play.png");
78 mStopIcon = QIcon(
":icons/controls/stop.png");
79 mPlayButton->setIcon(mStartIcon);
80 mLoopButton->setIcon(mLoopIcon);
81 mSoundButton->setIcon(mSoundIcon);
82 mJumpToEndButton->setIcon(mJumpToEndIcon);
83 mJumpToStartButton->setIcon(mJumpToStartIcon);
85 mPlayButton->setToolTip(tr(
"Play"));
86 mLoopButton->setToolTip(tr(
"Loop"));
87 mSoundButton->setToolTip(tr(
"Sound on/off"));
88 mJumpToEndButton->setToolTip(tr(
"End"));
89 mJumpToStartButton->setToolTip(tr(
"Start"));
91 mLoopButton->setCheckable(
true);
92 mSoundButton->setCheckable(
true);
93 mSoundButton->setChecked(
true);
95 addWidget(mJumpToStartButton);
96 addWidget(mPlayButton);
97 addWidget(mJumpToEndButton);
98 addWidget(mLoopButton);
99 addWidget(mPlaybackRangeCheckBox);
100 addWidget(mLoopStartSpinBox);
101 addWidget(mLoopEndSpinBox);
102 addWidget(mSoundButton);
107 auto spinBoxValueChanged =
static_cast< void ( QSpinBox::* )(
int )
>( &QSpinBox::valueChanged );
108 connect( mLoopStartSpinBox, spinBoxValueChanged,
this, &TimeControls::preLoopStartClick );
109 connect( mLoopEndSpinBox, spinBoxValueChanged,
this, &TimeControls::loopEndClick );
111 connect( mPlaybackRangeCheckBox, &QCheckBox::toggled, mLoopStartSpinBox, &QSpinBox::setEnabled );
112 connect( mPlaybackRangeCheckBox, &QCheckBox::toggled, mLoopEndSpinBox, &QSpinBox::setEnabled );
114 connect( mSoundButton, &QPushButton::clicked,
this, &TimeControls::soundClick );
115 connect( mSoundButton, &QPushButton::clicked,
this, &TimeControls::updateSoundIcon );
116 connect( mFpsBox, spinBoxValueChanged,
this, &TimeControls::fpsClick );
119 void TimeControls::initUI()
124 void TimeControls::updateUI()
128 mPlaybackRangeCheckBox->setChecked( playback->isRangedPlaybackOn() );
131 mLoopStartSpinBox->setValue( playback->markInFrame() );
134 mLoopEndSpinBox->setValue( playback->markOutFrame() );
137 mFpsBox->setValue( playback->fps() );
140 mLoopButton->setChecked( playback->isLooping() );
143 void TimeControls::setFps(
int value )
146 mFpsBox->setValue(value);
149 void TimeControls::toggleLoop(
bool checked)
151 mLoopButton->setChecked(checked);
154 void TimeControls::toggleLoopControl(
bool checked)
156 mPlaybackRangeCheckBox->setChecked(checked);
159 void TimeControls::setCore(
Editor* editor )
161 Q_ASSERT( editor !=
nullptr );
165 void TimeControls::makeConnections()
167 connect( mPlayButton, &QPushButton::clicked,
this, &TimeControls::playButtonClicked );
168 connect( mJumpToEndButton, &QPushButton::clicked,
this, &TimeControls::jumpToEndButtonClicked );
169 connect( mJumpToStartButton, &QPushButton::clicked,
this, &TimeControls::jumpToStartButtonClicked );
170 connect( mLoopButton, &QPushButton::clicked,
this, &TimeControls::loopButtonClicked );
171 connect( mPlaybackRangeCheckBox, &QCheckBox::clicked,
this, &TimeControls::playbackRangeClicked );
174 void TimeControls::playButtonClicked()
176 if ( mEditor->playback()->isPlaying() )
178 mEditor->playback()->stop();
182 mEditor->playback()->play();
187 void TimeControls::updatePlayState()
189 if( mEditor->playback()->isPlaying() )
191 mPlayButton->setIcon(mStopIcon);
192 mPlayButton->setToolTip(tr(
"Stop"));
196 mPlayButton->setIcon(mStartIcon);
197 mPlayButton->setToolTip(tr(
"Start"));
201 void TimeControls::jumpToStartButtonClicked()
203 if ( mPlaybackRangeCheckBox->isChecked() )
205 mEditor->scrubTo( mLoopStartSpinBox->value() );
209 mEditor->scrubTo( mEditor->layers()->firstKeyFrameIndex() );
213 void TimeControls::jumpToEndButtonClicked()
215 if ( mPlaybackRangeCheckBox->isChecked() )
217 mEditor->scrubTo( mLoopEndSpinBox->value() );
221 mEditor->scrubTo( mEditor->layers()->lastKeyFrameIndex() );
225 void TimeControls::loopButtonClicked(
bool bChecked )
227 mEditor->playback()->setLooping( bChecked );
230 void TimeControls::playbackRangeClicked(
bool bChecked )
232 mEditor->playback()->enableRangedPlayback( bChecked );
233 emit rangeStateChange();
236 void TimeControls::preLoopStartClick(
int i) {
237 if( i >= mLoopEndSpinBox->value() )
239 mLoopEndSpinBox->setValue( i + 1 );
241 mLoopEndSpinBox->setMinimum( i + 1 );
243 emit loopStartClick(i);
246 void TimeControls::updateSoundIcon(
bool soundEnabled)
250 mSoundButton->setIcon( QIcon(
":icons/controls/sound.png") );
254 mSoundButton->setIcon( QIcon(
":icons/controls/sound-disabled.png") );
258 void TimeControls::updateLength(
int frameLength) {
259 mLoopStartSpinBox->setMaximum(frameLength - 1);
260 mLoopEndSpinBox->setMaximum(frameLength);