m_document->renderer()->mltUpdateTransition(oldTransition.attribute("tag"), transition.attribute("tag"), transition.attribute("transition_btrack").toInt(), m_document->tracksCount() - transition.attribute("transition_atrack").toInt(), item->startPos(), item->endPos(), transition);
//kDebug() << "ORIGINAL TRACK: "<< oldTransition.attribute("transition_btrack") << ", NEW TRACK: "<<transition.attribute("transition_btrack");
item->setTransitionParameters(transition);
- if (updateTransitionWidget) emit transitionItemSelected(item, true);
+ if (updateTransitionWidget) {
+ ItemInfo info = item->info();
+ QPoint p;
+ ClipItem *transitionClip = getClipItemAt(info.startPos, info.track);
+ if (transitionClip && transitionClip->baseClip()) {
+ QString size = transitionClip->baseClip()->getProperty("frame_size");
+ p.setX(size.section('x', 0, 0).toInt());
+ p.setY(size.section('x', 1, 1).toInt());
+ }
+ emit transitionItemSelected(item, p, true);
+ }
m_document->setModified(true);
}
else prod = item->baseClip()->producer(m_dragItemInfo.track);
bool success = m_document->renderer()->mltMoveClip((int)(m_document->tracksCount() - m_dragItemInfo.track), (int)(m_document->tracksCount() - m_dragItem->track()), (int) m_dragItemInfo.startPos.frames(m_document->fps()), (int)(m_dragItem->startPos().frames(m_document->fps())), prod);
if (success) {
+ kDebug() << "// get trans info";
int tracknumber = m_document->tracksCount() - item->track() - 1;
bool isLocked = m_document->trackInfoAt(tracknumber).isLocked;
if (isLocked) item->setItemLocked(true);
new MoveClipCommand(this, m_dragItemInfo, info, false, moveCommand);
// Also move automatic transitions (on lower track)
Transition *tr = getTransitionItemAtStart(m_dragItemInfo.startPos, m_dragItemInfo.track);
+ kDebug() << "// get trans info2";
if (tr && tr->isAutomatic()) {
ItemInfo trInfo = tr->info();
ItemInfo newTrInfo = trInfo;
m_commandStack->push(command);
updateEffect(m_document->tracksCount() - item->track(), item->startPos(), item->selectedEffect(), item->selectedEffectIndex());
}
-
- emit transitionItemSelected((m_dragItem && m_dragItem->type() == TRANSITIONWIDGET && m_dragItem->isSelected()) ? static_cast <Transition *>(m_dragItem) : NULL);
+ if (m_dragItem && m_dragItem->type() == TRANSITIONWIDGET && m_dragItem->isSelected()) {
+ // A transition is selected
+ QPoint p;
+ ClipItem *transitionClip = getClipItemAt(m_dragItemInfo.startPos, m_dragItemInfo.track);
+ if (transitionClip && transitionClip->baseClip()) {
+ QString size = transitionClip->baseClip()->getProperty("frame_size");
+ p.setX(size.section('x', 0, 0).toInt());
+ p.setY(size.section('x', 1, 1).toInt());
+ }
+ emit transitionItemSelected(static_cast <Transition *>(m_dragItem), p);
+ } else emit transitionItemSelected(NULL);
if (m_operationMode != NONE && m_operationMode != MOVE) m_document->setModified(true);
m_operationMode = NONE;
}
void zoomOut();
void mousePosition(int);
void clipItemSelected(ClipItem*, int ix = -1);
- void transitionItemSelected(Transition*, bool update = false);
+ void transitionItemSelected(Transition*, QPoint p = QPoint(), bool update = false);
void activateDocumentMonitor();
void trackHeightChanged();
void displayMessage(const QString, MessageType);
EffectStackEdit::EffectStackEdit(QWidget *parent) :
QWidget(parent),
m_in(0),
- m_out(0)
+ m_out(0),
+ m_frameSize(QPoint())
{
setSizePolicy(QSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding));
QVBoxLayout *vbox1 = new QVBoxLayout(parent);
iconCache.clear();
}
+void EffectStackEdit::setFrameSize(QPoint p)
+{
+ m_frameSize = p;
+}
+
void EffectStackEdit::updateProjectFormat(MltVideoProfile profile, Timecode t)
{
m_profile = profile;
m_valueItems[paramName+"complex"] = pl;
m_items.append(pl);
} else if (type == "geometry") {
- Geometryval *geo = new Geometryval(m_profile);
+ Geometryval *geo = new Geometryval(m_profile, m_frameSize);
connect(geo, SIGNAL(parameterChanged()), this, SLOT(collectAllParameters()));
connect(geo, SIGNAL(seekToPos(int)), this, SLOT(slotSeekToPos(int)));
geo->setupParam(pa, minFrame, maxFrame);
void updateProjectFormat(MltVideoProfile profile, Timecode t);
static QMap<QString, QImage> iconCache;
void updateParameter(const QString &name, const QString &value);
+ void setFrameSize(QPoint p);
class UiItem
{
Timecode m_timecode;
int m_in;
int m_out;
+ QPoint m_frameSize;
public slots:
void transferParamDesc(const QDomElement&, int , int);
#include <QInputDialog>
-Geometryval::Geometryval(const MltVideoProfile profile, QWidget* parent) :
+Geometryval::Geometryval(const MltVideoProfile profile, QPoint frame_size, QWidget* parent) :
QWidget(parent),
m_profile(profile),
m_paramRect(NULL),
m_geom(NULL),
m_path(NULL),
- m_fixedMode(false)
+ m_fixedMode(false),
+ m_frameSize(frame_size)
{
m_ui.setupUi(this);
QVBoxLayout* vbox = new QVBoxLayout(m_ui.widget);
m_scaleMenu->addAction(i18n("50%"), this, SLOT(slotResize50()));
m_scaleMenu->addAction(i18n("100%"), this, SLOT(slotResize100()));
m_scaleMenu->addAction(i18n("200%"), this, SLOT(slotResize200()));
+ m_scaleMenu->addAction(i18n("Original size"), this, SLOT(slotResizeOriginal()));
m_scaleMenu->addAction(i18n("Custom"), this, SLOT(slotResizeCustom()));
slotUpdateTransitionProperties();
}
+void Geometryval::slotResizeOriginal()
+{
+ if (m_frameSize.isNull()) slotResize100();
+ int pos = m_ui.spinPos->value();
+ Mlt::GeometryItem item;
+ int error = m_geom->fetch(&item, pos);
+ if (error || item.key() == false) {
+ // no keyframe under cursor
+ return;
+ }
+ m_paramRect->setRect(0, 0, m_frameSize.x(), m_frameSize.y());
+ slotUpdateTransitionProperties();
+}
+
void Geometryval::slotResizeCustom()
{
int pos = m_ui.spinPos->value();
{
Q_OBJECT
public:
- explicit Geometryval(const MltVideoProfile profile, QWidget* parent = 0);
+ explicit Geometryval(const MltVideoProfile profile, QPoint frame_size, QWidget* parent = 0);
QDomElement getParamDesc();
private:
QMenu *m_scaleMenu;
QMenu *m_alignMenu;
QAction *m_syncAction;
+ QPoint m_frameSize;
bool m_fixedMode;
void updateTransitionPath();
void slotResize100();
void slotResize200();
void slotResizeCustom();
+ void slotResizeOriginal();
void slotAlignRight();
void slotAlignLeft();
void slotAlignTop();
delete m_activeDocument;
m_activeDocument = NULL;
m_effectStack->clear();
- m_transitionConfig->slotTransitionItemSelected(NULL, false);
+ m_transitionConfig->slotTransitionItemSelected(NULL, QPoint(), false);
} else delete docToClose;
if (w == m_activeTimeline) {
delete m_activeTimeline;
disconnect(m_activeDocument, SIGNAL(deleteTimelineClip(const QString &)), m_activeTimeline, SLOT(slotDeleteClip(const QString &)));
disconnect(m_activeTimeline->projectView(), SIGNAL(clipItemSelected(ClipItem*, int)), m_effectStack, SLOT(slotClipItemSelected(ClipItem*, int)));
disconnect(m_activeTimeline->projectView(), SIGNAL(clipItemSelected(ClipItem*, int)), this, SLOT(slotActivateEffectStackView()));
- disconnect(m_activeTimeline, SIGNAL(transitionItemSelected(Transition*, bool)), m_transitionConfig, SLOT(slotTransitionItemSelected(Transition*, bool)));
- disconnect(m_activeTimeline, SIGNAL(transitionItemSelected(Transition*, bool)), this, SLOT(slotActivateTransitionView(Transition *)));
+ disconnect(m_activeTimeline, SIGNAL(transitionItemSelected(Transition*, QPoint, bool)), m_transitionConfig, SLOT(slotTransitionItemSelected(Transition*, QPoint, bool)));
+ disconnect(m_activeTimeline, SIGNAL(transitionItemSelected(Transition*, QPoint, bool)), this, SLOT(slotActivateTransitionView(Transition *)));
disconnect(m_zoomSlider, SIGNAL(valueChanged(int)), m_activeTimeline, SLOT(slotChangeZoom(int)));
disconnect(m_activeTimeline->projectView(), SIGNAL(displayMessage(const QString&, MessageType)), m_messageLabel, SLOT(setMessage(const QString&, MessageType)));
disconnect(m_activeTimeline->projectView(), SIGNAL(showClipFrame(DocClipBase *, const int)), m_clipMonitor, SLOT(slotSetXml(DocClipBase *, const int)));
connect(trackView->projectView(), SIGNAL(clipItemSelected(ClipItem*, int)), m_effectStack, SLOT(slotClipItemSelected(ClipItem*, int)));
connect(trackView->projectView(), SIGNAL(clipItemSelected(ClipItem*, int)), this, SLOT(slotActivateEffectStackView()));
- connect(trackView, SIGNAL(transitionItemSelected(Transition*, bool)), m_transitionConfig, SLOT(slotTransitionItemSelected(Transition*, bool)));
- connect(trackView, SIGNAL(transitionItemSelected(Transition*, bool)), this, SLOT(slotActivateTransitionView(Transition *)));
+ connect(trackView, SIGNAL(transitionItemSelected(Transition*, QPoint, bool)), m_transitionConfig, SLOT(slotTransitionItemSelected(Transition*, QPoint, bool)));
+ connect(trackView, SIGNAL(transitionItemSelected(Transition*, QPoint, bool)), this, SLOT(slotActivateTransitionView(Transition *)));
m_zoomSlider->setValue(doc->zoom());
connect(m_zoomSlider, SIGNAL(valueChanged(int)), trackView, SLOT(slotChangeZoom(int)));
connect(trackView->projectView(), SIGNAL(zoomIn()), this, SLOT(slotZoomIn()));
connect(m_trackview, SIGNAL(cursorMoved(int, int)), m_ruler, SLOT(slotCursorMoved(int, int)));
connect(m_trackview->horizontalScrollBar(), SIGNAL(valueChanged(int)), m_ruler, SLOT(slotMoveRuler(int)));
connect(m_trackview, SIGNAL(mousePosition(int)), this, SIGNAL(mousePosition(int)));
- connect(m_trackview, SIGNAL(transitionItemSelected(Transition*, bool)), this, SLOT(slotTransitionItemSelected(Transition*, bool)));
+ connect(m_trackview, SIGNAL(transitionItemSelected(Transition*, QPoint, bool)), this, SLOT(slotTransitionItemSelected(Transition*, QPoint, bool)));
connect(m_trackview, SIGNAL(doTrackLock(int, bool)), this, SLOT(slotChangeTrackLock(int, bool)));
slotChangeZoom(m_doc->zoom());
m_ruler->setZone(p);
}
-void TrackView::slotTransitionItemSelected(Transition *t, bool update)
+void TrackView::slotTransitionItemSelected(Transition *t, QPoint p, bool update)
{
- emit transitionItemSelected(t, update);
+ emit transitionItemSelected(t, p, update);
}
void TrackView::setDuration(int dur)
private slots:
void setCursorPos(int pos);
void moveCursorPos(int pos);
- void slotTransitionItemSelected(Transition*, bool update);
+ void slotTransitionItemSelected(Transition*, QPoint p, bool update);
void slotRebuildTrackHeaders();
void slotChangeTrackLock(int ix, bool lock);
signals:
void mousePosition(int);
void cursorMoved();
- void transitionItemSelected(Transition*, bool);
+ void transitionItemSelected(Transition*, QPoint, bool);
void zoneMoved(int, int);
void insertTrack(int);
void deleteTrack(int);
m_effectEdit->updateParameter("transition_btrack", QString::number(ix));
}
-void TransitionSettings::slotTransitionItemSelected(Transition* t, bool update)
+void TransitionSettings::slotTransitionItemSelected(Transition* t, QPoint p, bool update)
{
setEnabled(t != NULL);
+ m_effectEdit->setFrameSize(p);
if (t == m_usedTransition) {
if (t == NULL) return;
if (update) {
int m_tracksCount;
public slots:
- void slotTransitionItemSelected(Transition*, bool);
+ void slotTransitionItemSelected(Transition*, QPoint, bool);
void slotTransitionChanged(bool reinit = true, bool updateCurrent = false);
void slotUpdateEffectParams(const QDomElement&, const QDomElement&);