+double CustomTrackView::fps() const
+{
+ return m_document->fps();
+}
+
+void CustomTrackView::updateProjectFps()
+{
+ // update all clips to the new fps
+ resetSelectionGroup();
+ scene()->clearSelection();
+ m_dragItem = NULL;
+ QList<QGraphicsItem *> itemList = items();
+ for (int i = 0; i < itemList.count(); i++) {
+ // remove all items and re-add them one by one
+ if (itemList.at(i) != m_cursorLine && itemList.at(i)->parentItem() == NULL) m_scene->removeItem(itemList.at(i));
+ }
+ for (int i = 0; i < itemList.count(); i++) {
+ if (itemList.at(i)->parentItem() == 0 && (itemList.at(i)->type() == AVWIDGET || itemList.at(i)->type() == TRANSITIONWIDGET)) {
+ AbstractClipItem *clip = static_cast <AbstractClipItem *>(itemList.at(i));
+ clip->updateFps(m_document->fps());
+ m_scene->addItem(clip);
+ } else if (itemList.at(i)->type() == GROUPWIDGET) {
+ AbstractGroupItem *grp = static_cast <AbstractGroupItem *>(itemList.at(i));
+ QList<QGraphicsItem *> children = grp->childItems();
+ for (int j = 0; j < children.count(); j++) {
+ if (children.at(j)->type() == AVWIDGET || children.at(j)->type() == TRANSITIONWIDGET) {
+ AbstractClipItem *clip = static_cast <AbstractClipItem *>(children.at(j));
+ clip->setFlag(QGraphicsItem::ItemIsMovable, true);
+ clip->updateFps(m_document->fps());
+ }
+ }
+ m_document->clipManager()->removeGroup(grp);
+ m_scene->addItem(grp);
+ scene()->destroyItemGroup(grp);
+ for (int j = 0; j < children.count(); j++) {
+ if (children.at(j)->type() == AVWIDGET || children.at(j)->type() == TRANSITIONWIDGET) {
+ //children.at(j)->setParentItem(0);
+ children.at(j)->setSelected(true);
+ }
+ }
+ groupSelectedItems(true, true);
+ } else if (itemList.at(i)->type() == GUIDEITEM) {
+ Guide *g = static_cast<Guide *>(itemList.at(i));
+ g->updatePos();
+ m_scene->addItem(g);
+ }
+ }
+ viewport()->update();
+}
+
+void CustomTrackView::slotTrackDown()
+{
+ if (m_selectedTrack > m_document->tracksCount() - 2) m_selectedTrack = 0;
+ else m_selectedTrack++;
+ emit updateTrackHeaders();
+ QRectF rect(mapToScene(QPoint()).x(), m_selectedTrack * m_tracksHeight, 10, m_tracksHeight);
+ ensureVisible(rect);
+ viewport()->update();
+}
+
+void CustomTrackView::slotTrackUp()
+{
+ if (m_selectedTrack > 0) m_selectedTrack--;
+ else m_selectedTrack = m_document->tracksCount() - 1;
+ emit updateTrackHeaders();
+ QRectF rect(mapToScene(QPoint()).x(), m_selectedTrack * m_tracksHeight, 10, m_tracksHeight);
+ ensureVisible(rect);
+ viewport()->update();
+}
+
+int CustomTrackView::selectedTrack() const
+{
+ return m_selectedTrack;
+}
+
+void CustomTrackView::slotSelectTrack(int ix)
+{
+ m_selectedTrack = qMax(0, ix);
+ m_selectedTrack = qMin(ix, m_document->tracksCount() - 1);
+ emit updateTrackHeaders();
+ QRectF rect(mapToScene(QPoint()).x(), m_selectedTrack * m_tracksHeight, 10, m_tracksHeight);
+ ensureVisible(rect);
+ viewport()->update();
+}
+
+void CustomTrackView::selectClip(bool add, bool group)
+{
+ QRectF rect(m_cursorPos, m_selectedTrack * m_tracksHeight + m_tracksHeight / 2, 1, 1);
+ QList<QGraphicsItem *> selection = m_scene->items(rect);
+ resetSelectionGroup(group);
+ if (!group) m_scene->clearSelection();
+ for (int i = 0; i < selection.count(); i++) {
+ if (selection.at(i)->type() == AVWIDGET) {
+ selection.at(i)->setSelected(add);
+ break;
+ }
+ }
+ if (group) groupSelectedItems();
+}
+
+void CustomTrackView::selectTransition(bool add, bool group)
+{
+ QRectF rect(m_cursorPos, m_selectedTrack * m_tracksHeight + m_tracksHeight, 1, 1);
+ QList<QGraphicsItem *> selection = m_scene->items(rect);
+ resetSelectionGroup(group);
+ if (!group) m_scene->clearSelection();
+ for (int i = 0; i < selection.count(); i++) {
+ if (selection.at(i)->type() == TRANSITIONWIDGET) {
+ selection.at(i)->setSelected(add);
+ break;
+ }
+ }
+ if (group) groupSelectedItems();
+}
+
+QStringList CustomTrackView::extractTransitionsLumas()
+{
+ QStringList urls;
+ QList<QGraphicsItem *> itemList = items();
+ Transition *transitionitem;
+ QDomElement transitionXml;
+ for (int i = 0; i < itemList.count(); i++) {
+ if (itemList.at(i)->type() == TRANSITIONWIDGET) {
+ transitionitem = static_cast <Transition*>(itemList.at(i));
+ transitionXml = transitionitem->toXML();
+ QString luma = EffectsList::parameter(transitionXml, "luma");
+ if (!luma.isEmpty()) urls << luma;
+ }
+ }
+ return urls;
+}
+
+void CustomTrackView::setEditMode(EDITMODE mode)
+{
+ m_scene->setEditMode(mode);
+}
+
+void CustomTrackView::checkTrackSequence(int track)
+{
+ QList <int> times = m_document->renderer()->checkTrackSequence(m_document->tracksCount() - track);
+ //track = m_document->tracksCount() -track;
+ QRectF rect(0, track * m_tracksHeight + m_tracksHeight / 2, sceneRect().width(), 2);
+ QList<QGraphicsItem *> selection = m_scene->items(rect);
+ QList <int> timelineList;
+ timelineList.append(0);
+ for (int i = 0; i < selection.count(); i++) {
+ if (selection.at(i)->type() == AVWIDGET) {
+ ClipItem *clip = static_cast <ClipItem *>(selection.at(i));
+ int start = clip->startPos().frames(m_document->fps());
+ int end = clip->endPos().frames(m_document->fps());
+ if (!timelineList.contains(start)) timelineList.append(start);
+ if (!timelineList.contains(end)) timelineList.append(end);
+ }
+ }
+ qSort(timelineList);
+ kDebug() << "// COMPARE:\n" << times << "\n" << timelineList << "\n-------------------";
+ if (times != timelineList) KMessageBox::sorry(this, i18n("error"), i18n("TRACTOR"));
+}
+
+