22 #include <QHBoxLayout>
26 #include <QMessageBox>
28 #include <QWheelEvent>
33 #include "layermanager.h"
34 #include "timecontrols.h"
35 #include "timelinecells.h"
42 void TimeLine::initUI()
44 Q_ASSERT(editor() !=
nullptr);
50 mLayerList =
new TimeLineCells(
this, editor(), TIMELINE_CELL_TYPE::Layers);
51 mTracks =
new TimeLineCells(
this, editor(), TIMELINE_CELL_TYPE::Tracks);
86 layerButtons->
addWidget(removeLayerButton);
91 leftToolBarLayout->
addWidget(layerButtons);
92 leftToolBar->
setLayout(leftToolBarLayout);
94 QAction* newBitmapLayerAct =
new QAction(
QIcon(
":icons/layer-bitmap.png"),
tr(
"New Bitmap Layer"),
this);
95 QAction* newVectorLayerAct =
new QAction(
QIcon(
":icons/layer-vector.png"),
tr(
"New Vector Layer"),
this);
96 QAction* newSoundLayerAct =
new QAction(
QIcon(
":icons/layer-sound.png"),
tr(
"New Sound Layer"),
this);
97 QAction* newCameraLayerAct =
new QAction(
QIcon(
":icons/layer-camera.png"),
tr(
"New Camera Layer"),
this);
99 QMenu* layerMenu =
new QMenu(
tr(
"&Layer",
"Timeline add-layer menu"),
this);
104 addLayerButton->
setMenu(layerMenu);
108 leftLayout->
addWidget(leftToolBar, 0, 0);
131 duplicateKeyButton->
setIcon(
QIcon(
":icons/controls/duplicate.png"));
141 zoomSlider->
setValue(mTracks->getFrameSize());
147 timelineButtons->
addWidget(addKeyButton);
148 timelineButtons->
addWidget(removeKeyButton);
149 timelineButtons->
addWidget(duplicateKeyButton);
158 mTimeControls->setEditor(editor());
159 mTimeControls->initUI();
163 rightToolBarLayout->
addWidget(timelineButtons);
165 rightToolBarLayout->
addWidget(mTimeControls);
168 rightToolBar->
setLayout(rightToolBarLayout);
171 rightLayout->
addWidget(rightToolBar, 0, 0);
207 connect(mTimeControls, &TimeControls::soundToggled,
this, &TimeLine::soundClick);
208 connect(mTimeControls, &TimeControls::fpsChanged,
this, &TimeLine::fpsChanged);
209 connect(mTimeControls, &TimeControls::fpsChanged,
this, &TimeLine::updateLength);
210 connect(mTimeControls, &TimeControls::playButtonTriggered,
this, &TimeLine::playButtonTriggered);
211 connect(editor(), &Editor::currentFrameChanged, mTimeControls, &TimeControls::updateTimecodeLabel);
212 connect(mTimeControls, &TimeControls::fpsChanged, mTimeControls, &TimeControls::setFps);
213 connect(
this, &TimeLine::fpsChanged, mTimeControls, &TimeControls::setFps);
221 connect(mLayerList, &TimeLineCells::mouseMovedY, mLayerList, &TimeLineCells::setMouseMoveY);
222 connect(mLayerList, &TimeLineCells::mouseMovedY, mTracks, &TimeLineCells::setMouseMoveY);
223 connect(mTracks, &TimeLineCells::lengthChanged,
this, &TimeLine::updateLength);
225 connect(editor(), &Editor::currentFrameChanged,
this, &TimeLine::updateFrame);
228 connect(layer, &LayerManager::layerCountChanged,
this, &TimeLine::updateLayerNumber);
229 mNumLayers = layer->count();
234 void TimeLine::updateUI()
239 int TimeLine::getLength()
241 return mTracks->getFrameLength();
244 void TimeLine::setLength(
int frame)
246 mTracks->setFrameLength(frame);
256 int currentLength = mTracks->getFrameLength();
257 if(frame > (currentLength * 0.75))
259 int newLength =
static_cast<int>(std::max(frame, currentLength) * 1.5);
261 if (newLength > 9999)
264 mTracks->setFrameLength(newLength);
278 mHScrollbar->
event(event);
282 mVScrollbar->
event(event);
286 void TimeLine::deleteCurrentLayer()
289 QString strLayerName = layerMgr->currentLayer()->name();
292 tr(
"Delete Layer",
"Windows title of Delete current layer pop-up."),
293 tr(
"Are you sure you want to delete layer: %1? This cannot be undone.").arg(strLayerName),
298 Status st = layerMgr->deleteLayer(editor()->currentLayerIndex());
299 if (st == Status::ERROR_NEED_AT_LEAST_ONE_CAMERA_LAYER)
302 tr(
"Please keep at least one camera layer in project"));
307 void TimeLine::updateFrame(
int frameNumber)
312 mTracks->updateFrame(mLastUpdatedFrame);
313 mTracks->updateFrame(frameNumber);
315 mLastUpdatedFrame = frameNumber;
318 void TimeLine::updateLayerView()
320 int pageDisplay = (mTracks->
height() - mTracks->getOffsetY()) / mTracks->getLayerHeight();
323 mVScrollbar->
setMaximum(qMax(0, mNumLayers - pageDisplay));
328 void TimeLine::updateLayerNumber(
int numberOfLayers)
330 mNumLayers = numberOfLayers;
334 void TimeLine::updateLength()
336 int frameLength = getLength();
337 mHScrollbar->
setMaximum(qMax(0, frameLength - mTracks->
width() / mTracks->getFrameSize()));
338 mTimeControls->updateLength(frameLength);
342 void TimeLine::updateContent()
344 mLayerList->updateContent();
345 mTracks->updateContent();
349 void TimeLine::setLoop(
bool loop)
351 mTimeControls->setLoop(loop);
354 void TimeLine::setPlaying(
bool isPlaying)
357 mTimeControls->updatePlayState();
360 void TimeLine::setRangeState(
bool range)
362 mTimeControls->setRangeState(range);
365 int TimeLine::getRangeLower()
367 return mTimeControls->getRangeLower();
370 int TimeLine::getRangeUpper()
372 return mTimeControls->getRangeUpper();
375 void TimeLine::onObjectLoaded()
377 mTimeControls->updateUI();
378 updateLayerNumber(editor()->layers()->count());
void triggered(bool checked)
void setSizes(const QList< int > &list)
void setRange(int min, int max)
QString tr(const char *sourceText, const char *disambiguation, int n)
void setSpacing(int spacing)
void setOrientation(Qt::Orientation)
void splitterMoved(int pos, int index)
bool setAlignment(QWidget *w, Qt::Alignment alignment)
void extendLength(int frame)
Extends the timeline frame length if necessary.
void valueChanged(int value)
QMessageBox::StandardButton warning(QWidget *parent, const QString &title, const QString &text, QMessageBox::StandardButtons buttons, QMessageBox::StandardButton defaultButton)
QMetaObject::Connection connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type)
void setMargin(int margin)
void setSpacing(int spacing)