#include "trackdialog.h"
#include "tracksconfigdialog.h"
#include "configtrackscommand.h"
+#include "rebuildgroupcommand.h"
#include <KDebug>
#include <KLocale>
m_dragItem->resizeStart((int)(snappedPos));
} else if (m_operationMode == RESIZEEND && move) {
m_document->renderer()->pause();
- m_dragItem->resizeEnd((int)(snappedPos));
+ if (m_dragItem->type() == AVWIDGET && m_dragItem->parentItem() && m_dragItem->parentItem() != m_selectionGroup) {
+ AbstractGroupItem *parent = static_cast <AbstractGroupItem *>(m_dragItem->parentItem());
+ if (parent)
+ parent->resizeEnd((int)(snappedPos) - m_dragItemInfo.endPos.frames(m_document->fps()));
+ } else {
+ m_dragItem->resizeEnd((int)(snappedPos));
+ }
} else if (m_operationMode == FADEIN && move) {
((ClipItem*) m_dragItem)->setFadeIn((int)(mappedXPos - m_dragItem->startPos().frames(m_document->fps())));
} else if (m_operationMode == FADEOUT && move) {
for (int i = 0; i < children.count(); i++) {
if (children.at(i)->type() == GROUPWIDGET) {
QList<QGraphicsItem *> subchildren = children.at(i)->childItems();
- for (int j = 0; j < subchildren.count(); j++) {
+ for (int j = 0; j < subchildren.count(); j++)
collidingItems.removeAll(subchildren.at(j));
- }
}
collidingItems.removeAll(children.at(i));
}
for (int i = 0; i < children.count(); i++) {
if (children.at(i)->type() == GROUPWIDGET) {
QList<QGraphicsItem *> subchildren = children.at(i)->childItems();
- for (int j = 0; j < subchildren.count(); j++) {
+ for (int j = 0; j < subchildren.count(); j++)
collidingItems.removeAll(subchildren.at(j));
- }
}
collidingItems.removeAll(children.at(i));
}
for (int i = 0; i < children.count(); i++) {
if (children.at(i)->type() == GROUPWIDGET) {
QList<QGraphicsItem *> subchildren = children.at(i)->childItems();
- for (int j = 0; j < subchildren.count(); j++) {
+ for (int j = 0; j < subchildren.count(); j++)
collidingItems.removeAll(subchildren.at(j));
- }
}
collidingItems.removeAll(children.at(i));
}
for (int i = 0; i < children.count(); i++) {
if (children.at(i)->type() == GROUPWIDGET) {
QList<QGraphicsItem *> subchildren = children.at(i)->childItems();
- for (int j = 0; j < subchildren.count(); j++) {
+ for (int j = 0; j < subchildren.count(); j++)
collidingItems.removeAll(subchildren.at(j));
- }
}
collidingItems.removeAll(children.at(i));
}
}
m_moveOpMode = opMode;
setTipAnimation(clip, opMode, size);
- if (opMode == MOVE)
+ if (opMode == MOVE) {
setCursor(Qt::OpenHandCursor);
- else if (opMode == RESIZESTART)
+ ClipItem *ci = static_cast <ClipItem *>(item);
+ QString message = ci->clipName() + i18n(":");
+ message.append(i18n(" Position:") + m_document->timecode().getDisplayTimecode(ci->info().startPos, KdenliveSettings::frametimecode()));
+ message.append(i18n(" Duration:") + m_document->timecode().getDisplayTimecode(ci->cropDuration(), KdenliveSettings::frametimecode()));
+ emit displayMessage(message, InformationMessage);
+ } else if (opMode == RESIZESTART) {
setCursor(KCursor("left_side", Qt::SizeHorCursor));
- else if (opMode == RESIZEEND)
+ } else if (opMode == RESIZEEND) {
setCursor(KCursor("right_side", Qt::SizeHorCursor));
- else if (opMode == FADEIN || opMode == FADEOUT || opMode == TRANSITIONSTART || opMode == TRANSITIONEND || opMode == KEYFRAME)
+ } else if (opMode == FADEIN || opMode == FADEOUT) {
+ setCursor(Qt::PointingHandCursor);
+ emit displayMessage(i18n("Drag to add or resize a fade effect."), InformationMessage);
+ } else if (opMode == TRANSITIONSTART || opMode == TRANSITIONEND) {
setCursor(Qt::PointingHandCursor);
+ emit displayMessage(i18n("Click to add a transition."), InformationMessage);
+ } else if (opMode == KEYFRAME) {
+ setCursor(Qt::PointingHandCursor);
+ emit displayMessage(i18n("Move keyframe above or below clip to remove it, double click to add a new one."), InformationMessage);
+ }
} // no clip under mouse
else if (m_tool == RAZORTOOL) {
event->accept();
}
#if QT_VERSION >= 0x040600
// Add shadow to dragged item, currently disabled because of painting artifacts
- //TODO: re-enable when fixed
+ //TODO: re-enable when fixed
/*QGraphicsDropShadowEffect *eff = new QGraphicsDropShadowEffect();
eff->setBlurRadius(5);
eff->setOffset(3, 3);
QGraphicsView::mousePressEvent(event);
}
-void CustomTrackView::rebuildGroup(AbstractGroupItem* group)
+void CustomTrackView::rebuildGroup(int childTrack, GenTime childPos)
{
+ const QPointF p((int)childPos.frames(m_document->fps()), childTrack * m_tracksHeight + m_tracksHeight / 2);
+ QList<QGraphicsItem *> list = scene()->items(p);
+ AbstractGroupItem *group = NULL;
+ for (int i = 0; i < list.size(); i++) {
+ if (!list.at(i)->isEnabled()) continue;
+ if (list.at(i)->type() == GROUPWIDGET) {
+ group = static_cast <AbstractGroupItem *>(list.at(i));
+ break;
+ }
+ }
if (group) {
QList <QGraphicsItem *> children = group->childItems();
m_document->clipManager()->removeGroup(group);
if (m_dragItem && m_dragItem->hasKeyFrames()) {
/*if (m_moveOpMode == KEYFRAME) {
// user double clicked on a keyframe, open edit dialog
- //TODO: update for effects with several values per keyframe
+ //TODO: update for effects with several values per keyframe
QDialog d(parentWidget());
Ui::KeyFrameDialog_UI view;
view.setupUi(&d);
if (m_scene->selectedItems().count() == 1) {
item = static_cast <AbstractClipItem *>(m_scene->selectedItems().at(0));
} else {
- if (m_scene->selectedItems().empty()) {
+ if (m_scene->selectedItems().empty())
emit displayMessage(i18n("Cannot find clip to edit"), ErrorMessage);
- } else {
+ else
emit displayMessage(i18n("Cannot edit the duration of multiple items"), ErrorMessage);
- }
return;
}
}
+ if (!item) {
+ emit displayMessage(i18n("Cannot find clip to edit"), ErrorMessage);
+ return;
+ }
+
+ if (item->type() == GROUPWIDGET || (item->parentItem() && item->parentItem()->type() == GROUPWIDGET)) {
+ emit displayMessage(i18n("Cannot edit an item in a group"), ErrorMessage);
+ return;
+ }
+
if (!item->isItemLocked()) {
GenTime minimum;
GenTime maximum;
- if (item->type() == TRANSITIONWIDGET) {
+ if (item->type() == TRANSITIONWIDGET)
getTransitionAvailableSpace(item, minimum, maximum);
- } else {
+ else
getClipAvailableSpace(item, minimum, maximum);
- }
- //kDebug()<<"// GOT MOVE POS: "<<minimum.frames(25)<<" - "<<maximum.frames(25);
+
ClipDurationDialog d(item, m_document->timecode(), minimum, maximum, this);
if (d.exec() == QDialog::Accepted) {
+ ItemInfo clipInfo = item->info();
+ ItemInfo startInfo = clipInfo;
if (item->type() == TRANSITIONWIDGET) {
// move & resize transition
- ItemInfo startInfo;
- startInfo.startPos = item->startPos();
- startInfo.endPos = item->endPos();
- startInfo.track = item->track();
- ItemInfo endInfo;
- endInfo.startPos = d.startPos();
- endInfo.endPos = endInfo.startPos + d.duration();
- endInfo.track = item->track();
- MoveTransitionCommand *command = new MoveTransitionCommand(this, startInfo, endInfo, true);
+ clipInfo.startPos = d.startPos();
+ clipInfo.endPos = clipInfo.startPos + d.duration();
+ clipInfo.track = item->track();
+ MoveTransitionCommand *command = new MoveTransitionCommand(this, startInfo, clipInfo, true);
m_commandStack->push(command);
} else {
// move and resize clip
QUndoCommand *moveCommand = new QUndoCommand();
moveCommand->setText(i18n("Edit clip"));
- ItemInfo clipInfo = item->info();
if (d.duration() < item->cropDuration() || d.cropStart() != clipInfo.cropStart) {
// duration was reduced, so process it first
- ItemInfo startInfo = clipInfo;
clipInfo.endPos = clipInfo.startPos + d.duration();
clipInfo.cropStart = d.cropStart();
new ResizeClipCommand(this, startInfo, clipInfo, true, false, moveCommand);
}
if (d.startPos() != clipInfo.startPos) {
- ItemInfo startInfo = clipInfo;
+ startInfo = clipInfo;
clipInfo.startPos = d.startPos();
clipInfo.endPos = item->endPos() + (clipInfo.startPos - startInfo.startPos);
new MoveClipCommand(this, startInfo, clipInfo, true, moveCommand);
}
if (d.duration() > item->cropDuration()) {
// duration was increased, so process it after move
- ItemInfo startInfo = clipInfo;
+ startInfo = clipInfo;
clipInfo.endPos = clipInfo.startPos + d.duration();
clipInfo.cropStart = d.cropStart();
new ResizeClipCommand(this, startInfo, clipInfo, true, false, moveCommand);
m_commandStack->push(moveCommand);
}
}
- } else emit displayMessage(i18n("Item is locked"), ErrorMessage);
+ } else {
+ emit displayMessage(i18n("Item is locked"), ErrorMessage);
+ }
}
void CustomTrackView::editKeyFrame(const GenTime /*pos*/, const int /*track*/, const int /*index*/, const QString /*keyframes*/)
if (isLocked) item->setItemLocked(true);
ItemInfo clipInfo = info;
clipInfo.track = m_document->tracksCount() - item->track();
- if (m_document->renderer()->mltInsertClip(clipInfo, item->xml(), item->baseClip()->producer(item->track()), m_scene->editMode() == OVERWRITEEDIT, m_scene->editMode() == INSERTEDIT) == -1) {
+
+ int worked = m_document->renderer()->mltInsertClip(clipInfo, item->xml(), item->baseClip()->producer(item->track()), m_scene->editMode() == OVERWRITEEDIT, m_scene->editMode() == INSERTEDIT);
+ if (worked == -1) {
emit displayMessage(i18n("Cannot insert clip in timeline"), ErrorMessage);
brokenClips.append(item);
continue;
setDocumentModified();
/*
- // debug info
+ // debug info
QRectF rect(0, 1 * m_tracksHeight + m_tracksHeight / 2, sceneRect().width(), 2);
QList<QGraphicsItem *> selection = m_scene->items(rect);
QStringList timelineList;
void CustomTrackView::setCursorPos(int pos, bool seek)
{
- kDebug() << "SEEk TO: " << pos << ", SEEK: " << seek;
if (pos == m_cursorPos) return;
emit cursorMoved((int)(m_cursorPos), (int)(pos));
m_cursorPos = pos;
prepareResizeClipStart(m_dragItem, m_dragItemInfo, m_dragItem->startPos().frames(m_document->fps()));
} else if (m_operationMode == RESIZEEND && m_dragItem->endPos() != m_dragItemInfo.endPos) {
// resize end
- prepareResizeClipEnd(m_dragItem, m_dragItemInfo, m_dragItem->endPos().frames(m_document->fps()));
+ if (m_dragItem->type() == AVWIDGET && m_dragItem->parentItem() && m_dragItem->parentItem() != m_selectionGroup) {
+ AbstractGroupItem *parent = static_cast <AbstractGroupItem *>(m_dragItem->parentItem());
+ if (parent) {
+ QUndoCommand *resizeCommand = new QUndoCommand();
+ resizeCommand->setText(i18n("Resize group"));
+ QList <QGraphicsItem *> items = parent->childItems();
+ QList <ItemInfo> infos = parent->resizeInfos();
+ parent->clearResizeInfos();
+ int itemcount = 0;
+ for (int i = 0; i < items.count(); ++i) {
+ AbstractClipItem *item = static_cast<AbstractClipItem *>(items.at(i));
+ if (item && item->type() == AVWIDGET) {
+ ItemInfo info = infos.at(itemcount);
+ prepareResizeClipEnd(item, info, item->endPos().frames(m_document->fps()), false, resizeCommand);
+ ++itemcount;
+ }
+ }
+ m_commandStack->push(resizeCommand);
+ }
+ } else {
+ prepareResizeClipEnd(m_dragItem, m_dragItemInfo, m_dragItem->endPos().frames(m_document->fps()));
+ }
} else if (m_operationMode == FADEIN) {
// resize fade in effect
ClipItem * item = static_cast <ClipItem *>(m_dragItem);
val = (br.bottom() - val) * maxh;
int start = item->cropStart().frames(m_document->fps());
int end = (item->cropStart() + item->cropDuration()).frames(m_document->fps()) - 1;
+
if ((val < -50 || val > 150) && item->editedKeyFramePos() != start && item->editedKeyFramePos() != end) {
//delete keyframe
- kDebug() << "// DELETE KFR: " << item->editedKeyFramePos();
item->movedKeyframe(item->getEffectAt(item->selectedEffectIndex()), item->selectedKeyFramePos(), -1, 0);
- } else item->movedKeyframe(item->getEffectAt(item->selectedEffectIndex()), item->selectedKeyFramePos(), item->editedKeyFramePos(), item->editedKeyFrameValue());
+ } else {
+ item->movedKeyframe(item->getEffectAt(item->selectedEffectIndex()), item->selectedKeyFramePos(), item->editedKeyFramePos(), item->editedKeyFrameValue());
+ }
+
QDomElement newEffect = item->selectedEffect().cloneNode().toElement();
//item->updateKeyframeEffect();
//QString next = item->keyframes(item->selectedEffectIndex());
setDocumentModified();
}
-void CustomTrackView::prepareResizeClipStart(AbstractClipItem* item, ItemInfo oldInfo, int pos, bool check)
+void CustomTrackView::prepareResizeClipStart(AbstractClipItem* item, ItemInfo oldInfo, int pos, bool check, QUndoCommand *command)
{
if (pos == oldInfo.startPos.frames(m_document->fps()))
return;
resizeinfo.track = m_document->tracksCount() - resizeinfo.track;
bool success = m_document->renderer()->mltResizeClipStart(resizeinfo, item->startPos() - oldInfo.startPos);
if (success) {
- QUndoCommand *resizeCommand = new QUndoCommand();
- resizeCommand->setText(i18n("Resize clip"));
-
+ bool hasParentCommand = false;
+ if (command) {
+ hasParentCommand = true;
+ } else {
+ command = new QUndoCommand();
+ command->setText(i18n("Resize clip start"));
+ }
+
// Check if there is an automatic transition on that clip (lower track)
Transition *transition = getTransitionItemAtStart(oldInfo.startPos, oldInfo.track);
if (transition && transition->isAutomatic()) {
ItemInfo newTrInfo = trInfo;
newTrInfo.startPos = item->startPos();
if (newTrInfo.startPos < newTrInfo.endPos)
- new MoveTransitionCommand(this, trInfo, newTrInfo, true, resizeCommand);
+ new MoveTransitionCommand(this, trInfo, newTrInfo, true, command);
}
// Check if there is an automatic transition on that clip (upper track)
transition = getTransitionItemAtStart(oldInfo.startPos, oldInfo.track - 1);
newTrInfo.startPos = item->startPos();
ClipItem * upperClip = getClipItemAt(oldInfo.startPos, oldInfo.track - 1);
if ((!upperClip || !upperClip->baseClip()->isTransparent()) && newTrInfo.startPos < newTrInfo.endPos)
- new MoveTransitionCommand(this, trInfo, newTrInfo, true, resizeCommand);
+ new MoveTransitionCommand(this, trInfo, newTrInfo, true, command);
}
-
+
ClipItem *clip = static_cast < ClipItem * >(item);
updatePositionEffects(clip, oldInfo);
-
+
// check keyframes
QDomDocument doc;
QDomElement root = doc.createElement("list");
indexes.append(i);
}
}
-
+
if (clip->checkEffectsKeyframesPos(oldInfo.cropStart.frames(m_document->fps()), clip->cropStart().frames(m_document->fps()), true)) {
// Keyframes were modified, updateClip
QDomNodeList effs = doc.elementsByTagName("effect");
// Since we must always resize clip before updating the keyframes, we
// put a resize command before & after checking keyframes so that
// we are sure the resize is performed before whenever we do or undo the action
-
- new ResizeClipCommand(this, oldInfo, info, false, true, resizeCommand);
+
+ new ResizeClipCommand(this, oldInfo, info, false, true, command);
for (int i = 0; i < indexes.count(); i++) {
- new EditEffectCommand(this, m_document->tracksCount() - clip->track(), clip->startPos(), effs.at(i).cloneNode().toElement(), clip->effectAt(indexes.at(i)), indexes.at(i), false, resizeCommand);
+ new EditEffectCommand(this, m_document->tracksCount() - clip->track(), clip->startPos(), effs.at(i).cloneNode().toElement(), clip->effectAt(indexes.at(i)), indexes.at(i), false, command);
updateEffect(m_document->tracksCount() - clip->track(), clip->startPos(), clip->effectAt(indexes.at(i)), indexes.at(i));
}
- new ResizeClipCommand(this, oldInfo, info, false, true, resizeCommand);
+ new ResizeClipCommand(this, oldInfo, info, false, true, command);
emit clipItemSelected(clip);
} else {
- new ResizeClipCommand(this, oldInfo, info, false, false, resizeCommand);
+ new ResizeClipCommand(this, oldInfo, info, false, false, command);
}
-
- m_commandStack->push(resizeCommand);
+
+ if (!hasParentCommand)
+ m_commandStack->push(command);
} else {
KdenliveSettings::setSnaptopoints(false);
item->resizeStart((int) oldInfo.startPos.frames(m_document->fps()));
KdenliveSettings::setSnaptopoints(snap);
emit displayMessage(i18n("Cannot resize transition"), ErrorMessage);
} else {
- MoveTransitionCommand *command = new MoveTransitionCommand(this, oldInfo, info, false);
- m_commandStack->push(command);
+ MoveTransitionCommand *moveCommand = new MoveTransitionCommand(this, oldInfo, info, false, command);
+ if (command == NULL)
+ m_commandStack->push(moveCommand);
}
-
+
}
if (item->parentItem() && item->parentItem() != m_selectionGroup)
- rebuildGroup(static_cast <AbstractGroupItem *>(item->parentItem()));
+ new RebuildGroupCommand(this, item->info().track, item->info().startPos, command);
}
-void CustomTrackView::prepareResizeClipEnd(AbstractClipItem* item, ItemInfo oldInfo, int pos, bool check)
+void CustomTrackView::prepareResizeClipEnd(AbstractClipItem* item, ItemInfo oldInfo, int pos, bool check, QUndoCommand *command)
{
if (pos == oldInfo.endPos.frames(m_document->fps()))
return;
resizeinfo.track = m_document->tracksCount() - resizeinfo.track;
bool success = m_document->renderer()->mltResizeClipEnd(resizeinfo, resizeinfo.endPos - resizeinfo.startPos);
if (success) {
- QUndoCommand *resizeCommand = new QUndoCommand();
- resizeCommand->setText(i18n("Resize clip"));
-
+ bool hasParentCommand = false;
+ if (command) {
+ hasParentCommand = true;
+ } else {
+ command = new QUndoCommand();
+ command->setText(i18n("Resize clip end"));
+ }
+
// Check if there is an automatic transition on that clip (lower track)
Transition *tr = getTransitionItemAtEnd(oldInfo.endPos, oldInfo.track);
if (tr && tr->isAutomatic()) {
ItemInfo newTrInfo = trInfo;
newTrInfo.endPos = item->endPos();
if (newTrInfo.endPos > newTrInfo.startPos)
- new MoveTransitionCommand(this, trInfo, newTrInfo, true, resizeCommand);
+ new MoveTransitionCommand(this, trInfo, newTrInfo, true, command);
}
-
+
// Check if there is an automatic transition on that clip (upper track)
tr = getTransitionItemAtEnd(oldInfo.endPos, oldInfo.track - 1);
if (tr && tr->isAutomatic() && (m_document->tracksCount() - tr->transitionEndTrack()) == oldInfo.track) {
newTrInfo.endPos = item->endPos();
ClipItem * upperClip = getClipItemAtEnd(oldInfo.endPos, oldInfo.track - 1);
if ((!upperClip || !upperClip->baseClip()->isTransparent()) && newTrInfo.endPos > newTrInfo.startPos)
- new MoveTransitionCommand(this, trInfo, newTrInfo, true, resizeCommand);
+ new MoveTransitionCommand(this, trInfo, newTrInfo, true, command);
}
-
+
// check keyframes
ClipItem *clip = static_cast < ClipItem * >(item);
QDomDocument doc;
indexes.append(i);
}
}
-
+
if (clip->checkEffectsKeyframesPos((oldInfo.cropStart + oldInfo.endPos - oldInfo.startPos).frames(m_document->fps()) - 1, (clip->cropStart() + clip->cropDuration()).frames(m_document->fps()) - 1, false)) {
// Keyframes were modified, updateClip
QDomNodeList effs = doc.elementsByTagName("effect");
// Since we must always resize clip before updating the keyframes, we
// put a resize command before & after checking keyframes so that
// we are sure the resize is performed before whenever we do or undo the action
-
- new ResizeClipCommand(this, oldInfo, info, false, true, resizeCommand);
+
+ new ResizeClipCommand(this, oldInfo, info, false, true, command);
for (int i = 0; i < indexes.count(); i++) {
- new EditEffectCommand(this, m_document->tracksCount() - clip->track(), clip->startPos(), effs.at(i).cloneNode().toElement(), clip->effectAt(indexes.at(i)), indexes.at(i), false, resizeCommand);
+ new EditEffectCommand(this, m_document->tracksCount() - clip->track(), clip->startPos(), effs.at(i).cloneNode().toElement(), clip->effectAt(indexes.at(i)), indexes.at(i), false, command);
updateEffect(m_document->tracksCount() - clip->track(), clip->startPos(), clip->effectAt(indexes.at(i)), indexes.at(i));
}
- new ResizeClipCommand(this, oldInfo, info, false, true, resizeCommand);
+ new ResizeClipCommand(this, oldInfo, info, false, true, command);
emit clipItemSelected(clip);
} else {
- new ResizeClipCommand(this, oldInfo, info, false, false, resizeCommand);
+ new ResizeClipCommand(this, oldInfo, info, false, false, command);
}
-
- m_commandStack->push(resizeCommand);
+
+ if (!hasParentCommand)
+ m_commandStack->push(command);
updatePositionEffects(clip, oldInfo);
} else {
KdenliveSettings::setSnaptopoints(false);
KdenliveSettings::setSnaptopoints(true);
emit displayMessage(i18n("Cannot resize transition"), ErrorMessage);
} else {
- MoveTransitionCommand *command = new MoveTransitionCommand(this, oldInfo, info, false);
- m_commandStack->push(command);
+ MoveTransitionCommand *moveCommand = new MoveTransitionCommand(this, oldInfo, info, false, command);
+ if (command == NULL)
+ m_commandStack->push(moveCommand);
}
}
if (item->parentItem() && item->parentItem() != m_selectionGroup)
- rebuildGroup(static_cast <AbstractGroupItem *>(item->parentItem()));
+ new RebuildGroupCommand(this, item->info().track, item->info().startPos, command);
}
void CustomTrackView::updatePositionEffects(ClipItem * item, ItemInfo info)
QDomElement oldeffect = item->effectAt(effectPos);
int start = item->cropStart().frames(m_document->fps());
int max = start + item->cropDuration().frames(m_document->fps());
+ if (start < 0) {
+ max -= start;
+ start = 0;
+ }
oldeffect.setAttribute("in", start);
oldeffect.setAttribute("out", max);
if (!m_document->renderer()->mltEditEffect(m_document->tracksCount() - item->track(), item->startPos(), item->getEffectArgs(oldeffect)))
int diff = sceneRect().width() - m_projectDuration;
if (diff * newmatrix.m11() < 50) {
- if (newmatrix.m11() < 0.4) setSceneRect(0, 0, (m_projectDuration + 100 / newmatrix.m11()), sceneRect().height());
- else setSceneRect(0, 0, (m_projectDuration + 300), sceneRect().height());
+ if (newmatrix.m11() < 0.4)
+ setSceneRect(0, 0, (m_projectDuration + 100 / newmatrix.m11()), sceneRect().height());
+ else
+ setSceneRect(0, 0, (m_projectDuration + 300), sceneRect().height());
}
centerOn(QPointF(cursorPos(), verticalPos));
}
void CustomTrackView::slotRefreshGuides()
{
if (KdenliveSettings::showmarkers()) {
- for (int i = 0; i < m_guides.count(); i++) {
+ for (int i = 0; i < m_guides.count(); i++)
m_guides.at(i)->update();
- }
}
}
TrackInfo info = m_document->trackInfoAt(maxTrack - i - 1);
if (info.isLocked || info.type == AUDIOTRACK || i == m_selectedTrack) {
const QRectF track(min, m_tracksHeight * i + 1, max - min, m_tracksHeight - 1);
- if (i == m_selectedTrack) painter->fillRect(track, scheme.background(KColorScheme::ActiveBackground).color());
- else painter->fillRect(track, info.isLocked ? lockedColor : audioColor);
+ if (i == m_selectedTrack)
+ painter->fillRect(track, scheme.background(KColorScheme::ActiveBackground).color());
+ else
+ painter->fillRect(track, info.isLocked ? lockedColor : audioColor);
}
painter->drawLine(QPointF(min, m_tracksHeight *(i + 1)), QPointF(max, m_tracksHeight *(i + 1)));
}
}
// add guides
- for (int i = 0; i < m_guides.count(); i++) {
+ for (int i = 0; i < m_guides.count(); i++)
m_searchPoints.append(m_guides.at(i)->info());
- }
qSort(m_searchPoints);
}
for (int i = 0; i < itemList.count(); i++) {
if (itemList.at(i)->type() == AVWIDGET) {
ClipItem *item = (ClipItem *)itemList.at(i);
- if (item->clipProducer() == clipId) {
+ if (item->clipProducer() == clipId)
matchingInfo << item->info();
- }
}
}
return matchingInfo;
void CustomTrackView::slotInsertTrack(int ix)
{
TrackDialog d(m_document, parentWidget());
+ d.comboTracks->setCurrentIndex(ix);
d.label->setText(i18n("Insert track"));
- d.track_nb->setMaximum(m_document->tracksCount() - 1);
- d.track_nb->setValue(ix);
d.setWindowTitle(i18n("Insert New Track"));
- d.slotUpdateName(ix);
if (d.exec() == QDialog::Accepted) {
- ix = d.track_nb->value();
- if (d.before_select->currentIndex() == 1) {
+ ix = d.comboTracks->currentIndex();
+ if (d.before_select->currentIndex() == 1)
ix++;
- }
TrackInfo info;
+ info.isMute = false;
+ info.isLocked = false;
if (d.video_track->isChecked()) {
info.type = VIDEOTRACK;
- info.isMute = false;
info.isBlind = false;
- info.isLocked = false;
} else {
info.type = AUDIOTRACK;
- info.isMute = false;
info.isBlind = true;
- info.isLocked = false;
}
AddTrackCommand *addTrack = new AddTrackCommand(this, ix, info, true);
m_commandStack->push(addTrack);
{
if (m_document->tracksCount() < 2) return;
TrackDialog d(m_document, parentWidget());
+ d.comboTracks->setCurrentIndex(ix);
d.label->setText(i18n("Delete track"));
d.before_select->setHidden(true);
- d.track_nb->setMaximum(m_document->tracksCount() - 1);
- d.track_nb->setValue(ix);
- d.slotUpdateName(ix);
d.setWindowTitle(i18n("Delete Track"));
d.video_track->setHidden(true);
d.audio_track->setHidden(true);
if (d.exec() == QDialog::Accepted) {
- ix = d.track_nb->value();
+ ix = d.comboTracks->currentIndex();
TrackInfo info = m_document->trackInfoAt(m_document->tracksCount() - ix - 1);
deleteTimelineTrack(ix, info);
setDocumentModified();