From: <j-...@us...> - 2008-03-08 14:39:55
|
Revision: 2012 http://kdenlive.svn.sourceforge.net/kdenlive/?rev=2012&view=rev Author: j-b-m Date: 2008-03-08 06:39:57 -0800 (Sat, 08 Mar 2008) Log Message: ----------- start implementing transitions. buttons in statusbar to show / hide thumbnails Modified Paths: -------------- branches/KDE4/src/CMakeLists.txt branches/KDE4/src/clipitem.cpp branches/KDE4/src/clipitem.h branches/KDE4/src/customtrackview.cpp branches/KDE4/src/definitions.h branches/KDE4/src/mainwindow.cpp branches/KDE4/src/mainwindow.h Added Paths: ----------- branches/KDE4/src/transition.cpp branches/KDE4/src/transition.h branches/KDE4/src/widgets/timelinebuttons_ui.ui Modified: branches/KDE4/src/CMakeLists.txt =================================================================== --- branches/KDE4/src/CMakeLists.txt 2008-03-08 12:33:16 UTC (rev 2011) +++ branches/KDE4/src/CMakeLists.txt 2008-03-08 14:39:57 UTC (rev 2012) @@ -36,6 +36,7 @@ widgets/boolval_ui.ui widgets/colorval_ui.ui widgets/titlewidget_ui.ui + widgets/timelinebuttons_ui.ui ) set(kdenlive_SRCS @@ -80,6 +81,7 @@ graphicsscenerectmove.cpp effectslistwidget.cpp titledocument.cpp + transition.cpp ) kde4_add_kcfg_files(kdenlive_SRCS GENERATE_MOC kdenlivesettings.kcfgc ) Modified: branches/KDE4/src/clipitem.cpp =================================================================== --- branches/KDE4/src/clipitem.cpp 2008-03-08 12:33:16 UTC (rev 2011) +++ branches/KDE4/src/clipitem.cpp 2008-03-08 14:39:57 UTC (rev 2012) @@ -347,20 +347,20 @@ } // For testing puspose only: draw transitions count -/* { + { painter->setPen(pen); QFont font = painter->font(); QFont smallFont = font; smallFont.setPointSize(8); painter->setFont(smallFont); - QString txt = " Transitions: " + QString::number(m_transitionsList.count()) + " "; - QRectF txtBoundin = painter->boundingRect(br, Qt::AlignHCenter | Qt::AlignTop, txt); + QString txt = " Transitions: " + QString::number(m_transitionsList.count()) + " "; + QRectF txtBoundin = painter->boundingRect(br, Qt::AlignRight | Qt::AlignTop, txt); painter->fillRect(txtBoundin, QBrush(QColor(0, 0, 0, 150))); painter->drawText(txtBoundin, Qt::AlignCenter, txt); pen.setColor(Qt::black); painter->setPen(pen); painter->setFont(font); - }*/ + } // Draw clip name QRectF txtBounding = painter->boundingRect(br, Qt::AlignHCenter | Qt::AlignTop, " " + m_clipName + " "); @@ -474,11 +474,11 @@ } } - if (m_clipType != AV) pixpainter.setBrush(QBrush(QColor(200, 200, 100))); - else { - pixpainter.setPen(QPen(QColor(0, 0, 0))); - pixpainter.setBrush(QBrush(QColor(60, 60, 60))); - } + if (m_clipType != AV) pixpainter.setBrush(QBrush(QColor(200, 200, 100))); + else { + pixpainter.setPen(QPen(QColor(0, 0, 0))); + pixpainter.setBrush(QBrush(QColor(60, 60, 60))); + } for (int i = 0;i < channels;i++) { if (fullAreaDraw) { //pixpainter.fillPath(positiveChannelPaths[i].united(negativeChannelPaths[i]),QBrush(Qt::SolidPattern));//or singleif looks better @@ -742,6 +742,11 @@ update(boundingRect()); } +void ClipItem::addTransition(Transition tr) { + m_transitionsList.append(&tr); + update(); +} + //virtual void ClipItem::dropEvent(QGraphicsSceneDragDropEvent * event) { QString effects = QString(event->mimeData()->data("kdenlive/effectslist")); Modified: branches/KDE4/src/clipitem.h =================================================================== --- branches/KDE4/src/clipitem.h 2008-03-08 12:33:16 UTC (rev 2011) +++ branches/KDE4/src/clipitem.h 2008-03-08 14:39:57 UTC (rev 2012) @@ -31,6 +31,7 @@ #include "effectslist.h" #include "docclipbase.h" #include "kthumb.h" +#include "transition.h" class ClipItem : public QObject, public QGraphicsRectItem { @@ -81,6 +82,7 @@ /** Replace effect at pos ix with given value */ void setEffectAt(int ix, QDomElement effect); void flashClip(); + void addTransition(Transition tr); protected: virtual void mouseMoveEvent(QGraphicsSceneMouseEvent * event); @@ -122,6 +124,7 @@ bool m_hover; EffectsList m_effectList; + QList <Transition *> m_transitionsList; QMap<int, QPixmap> audioThumbCachePic; bool audioThumbWasDrawn, audioThumbReady; double framePixelWidth; Modified: branches/KDE4/src/customtrackview.cpp =================================================================== --- branches/KDE4/src/customtrackview.cpp 2008-03-08 12:33:16 UTC (rev 2011) +++ branches/KDE4/src/customtrackview.cpp 2008-03-08 14:39:57 UTC (rev 2012) @@ -36,6 +36,7 @@ #include "addeffectcommand.h" #include "editeffectcommand.h" #include "kdenlivesettings.h" +#include "transition.h" CustomTrackView::CustomTrackView(KdenliveDoc *doc, QGraphicsScene * projectscene, QWidget *parent) : QGraphicsView(projectscene, parent), m_tracksCount(0), m_cursorPos(0), m_dropItem(NULL), m_cursorLine(NULL), m_operationMode(NONE), m_startPos(QPointF()), m_dragItem(NULL), m_visualTip(NULL), m_moveOpMode(NONE), m_animation(NULL), m_projectDuration(0), m_scale(1.0), m_clickPoint(0), m_document(doc), m_autoScroll(KdenliveSettings::autoscroll()) { @@ -340,6 +341,10 @@ m_startPos = QPointF(m_dragItem->startPos().frames(m_document->fps()), m_dragItem->track()); else if (m_operationMode == RESIZEEND) m_startPos = QPointF(m_dragItem->endPos().frames(m_document->fps()), m_dragItem->track()); + else if (m_operationMode == TRANSITIONSTART) { + Transition tra(m_dragItem, LUMA_TRANSITION, m_dragItem->startPos(), GenTime(2.5)); + m_dragItem->addTransition(tra); + } kDebug() << "//////// ITEM CLICKED: " << m_startPos; collision = true; break; Modified: branches/KDE4/src/definitions.h =================================================================== --- branches/KDE4/src/definitions.h 2008-03-08 12:33:16 UTC (rev 2011) +++ branches/KDE4/src/definitions.h 2008-03-08 14:39:57 UTC (rev 2012) @@ -27,6 +27,15 @@ enum OPERATIONTYPE { NONE = 0, MOVE = 1, RESIZESTART = 2, RESIZEEND = 3, FADEIN = 4, FADEOUT = 5, TRANSITIONSTART = 6, TRANSITIONEND = 7}; enum CLIPTYPE { UNKNOWN = 0, AUDIO = 1, VIDEO = 2, AV = 3, COLOR = 4, IMAGE = 5, TEXT = 6, SLIDESHOW = 7, VIRTUAL = 8, PLAYLIST = 9}; +enum TRANSITIONTYPE { + /** TRANSITIONTYPE: between 0-99: video trans, 100-199: video+audio trans, 200-299: audio trans */ + LUMA_TRANSITION = 0, + COMPOSITE_TRANSITION = 1, + PIP_TRANSITION = 2, + LUMAFILE_TRANSITION = 3, + MIX_TRANSITION = 200 +}; + struct MltVideoProfile { QString path; QString description; Modified: branches/KDE4/src/mainwindow.cpp =================================================================== --- branches/KDE4/src/mainwindow.cpp 2008-03-08 12:33:16 UTC (rev 2011) +++ branches/KDE4/src/mainwindow.cpp 2008-03-08 14:39:57 UTC (rev 2012) @@ -55,8 +55,9 @@ #define ID_STATUS_MSG 1 #define ID_EDITMODE_MSG 2 #define ID_TIMELINE_MSG 3 -#define ID_TIMELINE_POS 4 -#define ID_TIMELINE_FORMAT 5 +#define ID_TIMELINE_BUTTONS 4 +#define ID_TIMELINE_POS 5 +#define ID_TIMELINE_FORMAT 6 MainWindow::MainWindow(QWidget *parent) : KXmlGuiWindow(parent), @@ -151,11 +152,25 @@ statusProgressBar->setVisible(false); statusLabel = new QLabel(this); + QWidget *w = new QWidget; + timeline_buttons_ui.setupUi(w); + timeline_buttons_ui.buttonVideo->setDown(KdenliveSettings::videothumbnails()); + timeline_buttons_ui.buttonAudio->setDown(KdenliveSettings::audiothumbnails()); + connect(timeline_buttons_ui.buttonVideo, SIGNAL(clicked()), this, SLOT(slotSwitchVideoThumbs())); + connect(timeline_buttons_ui.buttonAudio, SIGNAL(clicked()), this, SLOT(slotSwitchAudioThumbs())); + statusBar()->insertPermanentWidget(0, statusProgressBar, 1); statusBar()->insertPermanentWidget(1, statusLabel, 1); + statusBar()->insertPermanentWidget(ID_TIMELINE_BUTTONS, w); statusBar()->insertPermanentFixedItem("00:00:00:00", ID_TIMELINE_POS); statusBar()->insertPermanentWidget(ID_TIMELINE_FORMAT, m_timecodeFormat); + statusBar()->setMaximumHeight(statusBar()->font().pointSize() * 4); + timeline_buttons_ui.buttonVideo->setIcon(KIcon("display-video")); + timeline_buttons_ui.buttonVideo->setToolTip(i18n("Show video thumbnails")); + timeline_buttons_ui.buttonAudio->setIcon(KIcon("display-audio")); + timeline_buttons_ui.buttonAudio->setToolTip(i18n("Show audio thumbnails")); + setupGUI(Default, "kdenliveui.rc"); connect(projectMonitorDock, SIGNAL(visibilityChanged(bool)), m_projectMonitor, SLOT(refreshMonitor(bool))); @@ -530,8 +545,30 @@ currentTab->projectView()->checkAutoScroll(); if (m_activeDocument) m_activeDocument->clipManager()->checkAudioThumbs(); } + timeline_buttons_ui.buttonAudio->setDown(KdenliveSettings::audiothumbnails()); + timeline_buttons_ui.buttonVideo->setDown(KdenliveSettings::videothumbnails()); } +void MainWindow::slotSwitchVideoThumbs() { + KdenliveSettings::setVideothumbnails(!KdenliveSettings::videothumbnails()); + TrackView *currentTab = (TrackView *) m_timelineArea->currentWidget(); + if (currentTab) { + currentTab->refresh(); + } + timeline_buttons_ui.buttonVideo->setDown(KdenliveSettings::videothumbnails()); +} + +void MainWindow::slotSwitchAudioThumbs() { + KdenliveSettings::setAudiothumbnails(!KdenliveSettings::audiothumbnails()); + TrackView *currentTab = (TrackView *) m_timelineArea->currentWidget(); + if (currentTab) { + currentTab->refresh(); + currentTab->projectView()->checkAutoScroll(); + if (m_activeDocument) m_activeDocument->clipManager()->checkAudioThumbs(); + } + timeline_buttons_ui.buttonAudio->setDown(KdenliveSettings::audiothumbnails()); +} + void MainWindow::slotGotProgressInfo(KUrl url, int progress) { statusProgressBar->setValue(progress); if (progress > 0) { Modified: branches/KDE4/src/mainwindow.h =================================================================== --- branches/KDE4/src/mainwindow.h 2008-03-08 12:33:16 UTC (rev 2011) +++ branches/KDE4/src/mainwindow.h 2008-03-08 14:39:57 UTC (rev 2012) @@ -43,8 +43,8 @@ #include "effectslist.h" #include "effectslistview.h" #include "effectstackview.h" +#include "ui_timelinebuttons_ui.h" - class MainWindow : public KXmlGuiWindow { Q_OBJECT @@ -98,6 +98,8 @@ EffectsList m_audioEffects; EffectsList m_customEffects; + Ui::TimelineButtons_UI timeline_buttons_ui; + KRecentFilesAction *m_fileOpenRecent; void readOptions(); void saveOptions(); @@ -127,6 +129,8 @@ void slotEditProjectSettings(); void slotDisplayActionMessage(QAction *a); void slotGotProgressInfo(KUrl url, int progress); + void slotSwitchVideoThumbs(); + void slotSwitchAudioThumbs(); }; #endif Added: branches/KDE4/src/transition.cpp =================================================================== --- branches/KDE4/src/transition.cpp (rev 0) +++ branches/KDE4/src/transition.cpp 2008-03-08 14:39:57 UTC (rev 2012) @@ -0,0 +1,299 @@ +/*************************************************************************** + transition.cpp - description + ------------------- + begin : Tue Jan 24 2006 + copyright : (C) 2006 by Jean-Baptiste Mardelle + email : jb...@ad... + ***************************************************************************/ + +/*************************************************************************** + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + ***************************************************************************/ + +#include <QBrush> +#include <qdom.h> + +#include <kdebug.h> +#include <KIcon> +#include <klocale.h> + +#include "transition.h" +#include "clipitem.h" +#include "kdenlivesettings.h" + + +Transition::Transition(ClipItem * clipa, const TRANSITIONTYPE & type, const GenTime &startTime, const GenTime &endTime, bool inverted) { + m_invertTransition = inverted; + m_singleClip = true; + m_transitionTrack = 0; + m_secondClip = NULL; + m_transitionType = type; + m_transitionName = getTransitionName(m_transitionType); + + GenTime duration = endTime - startTime; + + // Default duration = 2.5 seconds + GenTime defaultTransitionDuration = GenTime(2.5); + + m_referenceClip = clipa; + if (startTime < m_referenceClip->startPos()) m_transitionStart = GenTime(0.0); + else if (startTime > m_referenceClip->endPos()) m_transitionStart = m_referenceClip->duration() - defaultTransitionDuration; + else m_transitionStart = startTime - m_referenceClip->startPos(); + + if (m_transitionStart + duration > m_referenceClip->duration()) + m_transitionDuration = m_referenceClip->duration() - m_transitionStart; + else m_transitionDuration = duration; + m_secondClip = 0; +} + +// create a transition from XML +Transition::Transition(ClipItem * clip, QDomElement transitionElement, GenTime offset) { + if (offset == GenTime()) offset = clip->startPos(); + m_referenceClip = clip; + m_singleClip = true; + m_secondClip = NULL; + m_transitionStart = GenTime(transitionElement.attribute("start", QString::null).toInt(), m_referenceClip->fps()); + m_transitionDuration = GenTime(transitionElement.attribute("end", QString::null).toInt(), m_referenceClip->fps()) - m_transitionStart; + m_transitionTrack = transitionElement.attribute("transition_track", "0").toInt(); + m_transitionStart = m_transitionStart - offset; + + m_invertTransition = transitionElement.attribute("inverted", "0").toInt(); + uint transType = transitionElement.attribute("type", "0").toInt(); + if (transType == LUMA_TRANSITION) m_transitionType = LUMA_TRANSITION; + else if (transType == COMPOSITE_TRANSITION) m_transitionType = COMPOSITE_TRANSITION; + else if (transType == PIP_TRANSITION) m_transitionType = PIP_TRANSITION; + else if (transType == LUMAFILE_TRANSITION) m_transitionType = LUMAFILE_TRANSITION; + else if (transType == MIX_TRANSITION) m_transitionType = MIX_TRANSITION; + + // load transition parameters + typedef QMap<QString, QString> ParamMap; + ParamMap params; + for (QDomNode n = transitionElement.firstChild(); !n.isNull(); n = n.nextSibling()) { + QDomElement paramElement = n.toElement(); + params[paramElement.tagName()] = paramElement.attribute("value", QString::null); + } + if (m_invertTransition) params["reverse"] = "1"; + if (!params.isEmpty()) setTransitionParameters(params); + + // Check if transition is valid (not outside of clip) + if (m_transitionStart > clip->duration()) + m_transitionDuration = GenTime(); +} + +Transition::~Transition() { +} + +void Transition::setTransitionType(TRANSITIONTYPE newType) { + m_transitionType = newType; + m_transitionName = getTransitionName(m_transitionType); +} + +TRANSITIONTYPE Transition::transitionType() const { + return m_transitionType; +} + +QString Transition::transitionTag()const { + switch (m_transitionType) { + case COMPOSITE_TRANSITION: + return "composite"; + case PIP_TRANSITION: + return "composite"; + case MIX_TRANSITION: + return "mix"; + default: + return "luma"; + + } +} + +QString Transition::getTransitionName(const TRANSITIONTYPE & type) { + if (type == COMPOSITE_TRANSITION) return i18n("Push"); + else if (type == PIP_TRANSITION) return i18n("Pip"); + else if (type == LUMAFILE_TRANSITION) return i18n("Wipe"); + else if (type == MIX_TRANSITION) return i18n("Audio Fade"); + return i18n("Crossfade"); +} + +TRANSITIONTYPE Transition::getTransitionForName(const QString & type) { + if (type == i18n("Push")) return COMPOSITE_TRANSITION; + else if (type == i18n("Pip")) return PIP_TRANSITION; + else if (type == i18n("Wipe")) return LUMAFILE_TRANSITION; + return LUMA_TRANSITION; +} + + +QString Transition::transitionName() const { + return m_transitionName; +} + +void Transition::setTransitionParameters(const QMap < QString, QString > parameters) { + m_transitionParameters = parameters; +} + +const QMap < QString, QString > Transition::transitionParameters() const { + return m_transitionParameters; +} + +bool Transition::invertTransition() const { + if (!m_singleClip) { + if (m_referenceClip->startPos() < m_secondClip->startPos()) return true; + else return false; + } + return m_invertTransition; +} + +QPixmap Transition::transitionPixmap() const { + KIcon icon; + if (m_transitionType == LUMA_TRANSITION) { + if (invertTransition()) icon = KIcon("kdenlive_trans_down"); + else icon = KIcon("kdenlive_trans_up"); + } else if (m_transitionType == COMPOSITE_TRANSITION) { + icon = KIcon("kdenlive_trans_wiper"); + } else if (m_transitionType == LUMAFILE_TRANSITION) { + icon = KIcon("kdenlive_trans_luma"); + } else icon = KIcon("kdenlive_trans_pip"); + return icon.pixmap(QSize(15, 15)); +} + +int Transition::transitionTrack() const { + return m_transitionTrack; +} + +void Transition::setTransitionTrack(int track) { + m_transitionTrack = track; +} + +void Transition::setTransitionDirection(bool inv) { + m_invertTransition = inv; +} + +int Transition::transitionStartTrack() const { + return m_referenceClip->track(); +} + +int Transition::transitionEndTrack() const { + if (!m_singleClip) return m_secondClip->track(); + return m_referenceClip->track() + 1; + //TODO: calculate next video track +} + +GenTime Transition::transitionDuration() const { + return transitionEndTime() - transitionStartTime(); +} + +GenTime Transition::transitionStartTime() const { + if (!m_singleClip) { + GenTime startb = m_secondClip->startPos(); + GenTime starta = m_referenceClip->startPos(); + if (startb > m_referenceClip->endPos()) return m_referenceClip->endPos() - GenTime(0.12); + if (startb > starta) + return startb; + return starta; + } else return m_referenceClip->startPos() + m_transitionStart; +} + + +GenTime Transition::transitionEndTime() const { + if (!m_singleClip) { + GenTime endb = m_secondClip->endPos(); + GenTime enda = m_referenceClip->endPos(); + if (m_secondClip->startPos() > enda) return enda; + if (endb < m_referenceClip->startPos()) return m_referenceClip->startPos() + GenTime(0.12); + else if (endb > enda) return enda; + else return endb; + } else { + if (m_transitionStart + m_transitionDuration > m_referenceClip->duration()) + return m_referenceClip->endPos(); + return m_referenceClip->startPos() + m_transitionStart + m_transitionDuration; + } +} + + +void Transition::resizeTransitionStart(GenTime time) { + if (!m_singleClip) return; //cannot resize automatic transitions + if (time < m_referenceClip->startPos()) time = m_referenceClip->startPos(); + // Transitions shouldn't be shorter than 3 frames, about 0.12 seconds + if (transitionEndTime().ms() - time.ms() < 120.0) time = transitionEndTime() - GenTime(0.12); + m_transitionDuration = m_transitionDuration - (time - m_referenceClip->startPos() - m_transitionStart); + m_transitionStart = time - m_referenceClip->startPos(); +} + +void Transition::resizeTransitionEnd(GenTime time) { + if (!m_singleClip) return; //cannot resize automatic transitions + if (time > m_referenceClip->endPos()) time = m_referenceClip->endPos(); + // Transitions shouldn't be shorter than 3 frames, about 0.12 seconds + if (time.ms() - transitionStartTime().ms() < 120.0) time = transitionStartTime() + GenTime(0.12); + m_transitionDuration = time - (m_referenceClip->startPos() + m_transitionStart); +} + +void Transition::moveTransition(GenTime time) { + if (!m_singleClip) return; //cannot move automatic transitions + if (m_transitionStart + time < GenTime(0.0)) m_transitionStart = GenTime(0.0); + else if (m_transitionStart + time > m_referenceClip->duration() - m_transitionDuration) + m_transitionStart = m_referenceClip->duration() - m_transitionDuration; + else m_transitionStart = m_transitionStart + time; + if (m_transitionStart < GenTime(0.0)) m_transitionStart = GenTime(0.0); +} + +bool Transition::hasClip(const ClipItem * clip) const { + if (clip == m_secondClip) return true; + return false; +} + +bool Transition::belongsToClip(const ClipItem * clip) const { + if (clip == m_referenceClip) return true; + return false; +} + +Transition *Transition::clone() { + return new Transition::Transition(m_referenceClip, this->toXML()); + /*if (m_singleClip || m_secondClip == 0) + return new Transition::Transition(m_referenceClip); + else + //return new Transition::Transition(m_referenceClip, m_secondClip); + return new Transition::Transition(m_referenceClip, this->toXML()); + */ +} + +Transition *Transition::reparent(ClipItem * clip) { + return new Transition::Transition(clip, this->toXML(), m_referenceClip->startPos()); +} + +bool Transition::isValid() const { + return (m_transitionDuration != GenTime()); +} + +const ClipItem *Transition::referencedClip() const { + return m_referenceClip; +} + +QDomElement Transition::toXML() { + QDomDocument doc; + QDomElement effect = doc.createElement("ktransition"); + effect.setAttribute("type", transitionType()); + effect.setAttribute("inverted", invertTransition()); + effect.setAttribute("transition_track", m_transitionTrack); + effect.setAttribute("start", transitionStartTime().frames(m_referenceClip->fps())); + effect.setAttribute("end", transitionEndTime().frames(m_referenceClip->fps())); + + if (m_secondClip) { + effect.setAttribute("clipb_starttime", m_secondClip->startPos().frames(m_referenceClip->fps())); + effect.setAttribute("clipb_track", transitionEndTrack()); + } + + + QMap<QString, QString>::Iterator it; + for (it = m_transitionParameters.begin(); it != m_transitionParameters.end(); ++it) { + QDomElement param = doc.createElement(it.key()); + param.setAttribute("value", it.value()); + effect.appendChild(param); + } + + return effect; +} + Added: branches/KDE4/src/transition.h =================================================================== --- branches/KDE4/src/transition.h (rev 0) +++ branches/KDE4/src/transition.h 2008-03-08 14:39:57 UTC (rev 2012) @@ -0,0 +1,108 @@ +/*************************************************************************** + transition.h - description + ------------------- + begin : Tue Jan 24 2006 + copyright : (C) 2006 by Jean-Baptiste Mardelle + email : jb...@ad... + ***************************************************************************/ + +/*************************************************************************** + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + ***************************************************************************/ + +#ifndef TRANSITION_H +#define TRANSITION_H + +#include <QString> +#include <QGraphicsRectItem> +#include <qpixmap.h> +#include <qdom.h> +#include <qmap.h> + +#include "gentime.h" +#include "definitions.h" + + +/**Describes a Transition, with a name, parameters keyframes, etc. + *@author Jean-Baptiste Mardelle + */ + +class ClipItem; + +class Transition { +public: + + Transition(ClipItem * clipa, const TRANSITIONTYPE & type, const GenTime &startTime, const GenTime &endTime, bool inverted = false); + Transition(ClipItem * clip, QDomElement transitionElement, GenTime offset = GenTime()); + ~Transition(); + + /** Returns an XML representation of this transition. */ + QDomElement toXML(); + + GenTime transitionStartTime() const; + GenTime transitionEndTime() const; + /** Return the track number of transition in the playlist*/ + int transitionStartTrack() const; + int transitionEndTrack() const; + Transition *clone(); + bool hasClip(const ClipItem * clip) const; + bool belongsToClip(const ClipItem * clip) const; + void resizeTransitionEnd(GenTime time); + void resizeTransitionStart(GenTime time); + void moveTransition(GenTime time); + bool invertTransition() const; + TRANSITIONTYPE transitionType() const; + QString transitionTag() const; + QString transitionName() const; + void setTransitionType(TRANSITIONTYPE newType); + const QMap < QString, QString > transitionParameters() const; + void setTransitionParameters(const QMap < QString, QString > parameters); + void setTransitionDirection(bool inv); + int transitionTrack() const; + void setTransitionTrack(int track); + QPixmap transitionPixmap() const; + Transition *reparent(ClipItem * clip); + bool isValid() const; + GenTime transitionDuration() const; + const ClipItem *referencedClip() const; + +private: + + GenTime m_transitionStart; + GenTime m_transitionDuration; + QMap < QString, QString > m_transitionParameters; + + /** The name of the transition used by mlt (composite, luma,...)*/ + TRANSITIONTYPE m_transitionType; + + /** The name of the transition to be displayed to user */ + QString m_transitionName; + + /** Should the transition be reversed */ + bool m_invertTransition; + + bool m_singleClip; + + /** The track to which the transition is attached*/ + int m_track; + + /** The clip to which the transition is attached */ + ClipItem *m_referenceClip; + + /** The 2nd clip to which the transition is attached */ + ClipItem *m_secondClip; + int m_transitionTrack; + + /** Return the display name for a transition type */ + QString getTransitionName(const TRANSITIONTYPE & type); + + /** Return the transition type for a given name */ + TRANSITIONTYPE getTransitionForName(const QString & type); +}; + +#endif Added: branches/KDE4/src/widgets/timelinebuttons_ui.ui =================================================================== --- branches/KDE4/src/widgets/timelinebuttons_ui.ui (rev 0) +++ branches/KDE4/src/widgets/timelinebuttons_ui.ui 2008-03-08 14:39:57 UTC (rev 2012) @@ -0,0 +1,37 @@ +<ui version="4.0" > + <class>TimelineButtons_UI</class> + <widget class="QWidget" name="TimelineButtons_UI" > + <property name="geometry" > + <rect> + <x>0</x> + <y>0</y> + <width>58</width> + <height>30</height> + </rect> + </property> + <property name="windowTitle" > + <string>Form</string> + </property> + <layout class="QGridLayout" name="gridLayout" > + <property name="margin" > + <number>0</number> + </property> + <item row="0" column="0" > + <widget class="QToolButton" name="buttonVideo" > + <property name="text" > + <string>V</string> + </property> + </widget> + </item> + <item row="0" column="1" > + <widget class="QToolButton" name="buttonAudio" > + <property name="text" > + <string>A</string> + </property> + </widget> + </item> + </layout> + </widget> + <resources/> + <connections/> +</ui> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |