#include <KUrl>
#include <KIcon>
#include <KCursor>
+#include <KColorScheme>
#include <QMouseEvent>
#include <QStylePainter>
CustomTrackView::CustomTrackView(KdenliveDoc *doc, CustomTrackScene* projectscene, QWidget *parent) :
QGraphicsView(projectscene, parent),
- m_scene(projectscene),
+ m_tracksHeight(KdenliveSettings::trackheight()),
+ m_projectDuration(0),
m_cursorPos(0),
+ m_document(doc),
+ m_scene(projectscene),
m_cursorLine(NULL),
m_operationMode(NONE),
+ m_moveOpMode(NONE),
m_dragItem(NULL),
+ m_dragGuide(NULL),
m_visualTip(NULL),
- m_moveOpMode(NONE),
m_animation(NULL),
- m_projectDuration(0),
- m_clickPoint(QPoint()),
- m_document(doc),
+ m_clickPoint(),
m_autoScroll(KdenliveSettings::autoscroll()),
- m_tracksHeight(KdenliveSettings::trackheight()),
- m_tool(SELECTTOOL),
- m_dragGuide(NULL),
- m_findIndex(0),
- m_menuPosition(QPoint()),
- m_blockRefresh(false),
- m_selectionGroup(NULL),
- m_selectedTrack(0),
- m_copiedItems(QList<AbstractClipItem *> ()),
- m_scrollOffset(0),
m_changeSpeedAction(NULL),
m_pasteEffectsAction(NULL),
m_ungroupAction(NULL),
- m_clipDrag(false)
+ m_scrollOffset(0),
+ m_clipDrag(false),
+ m_findIndex(0),
+ m_tool(SELECTTOOL),
+ m_copiedItems(),
+ m_menuPosition(),
+ m_blockRefresh(false),
+ m_selectionGroup(NULL)
{
if (doc) m_commandStack = doc->commandStack();
else m_commandStack = NULL;
KIcon spacerIcon("kdenlive-spacer-tool");
m_spacerCursor = QCursor(spacerIcon.pixmap(22, 22));
verticalScrollBar()->setTracking(true);
- connect(verticalScrollBar(), SIGNAL(valueChanged(int)), this, SLOT(slotRefreshGuides()));
+ // Line below was supposed to scroll guides label with scrollbar, not implemented yet
+ //connect(verticalScrollBar(), SIGNAL(valueChanged(int)), this, SLOT(slotRefreshGuides()));
connect(&m_scrollTimer, SIGNAL(timeout()), this, SLOT(slotCheckMouseScrolling()));
m_scrollTimer.setInterval(100);
m_scrollTimer.setSingleShot(true);
break;
}
}
+
+ m_timelineContextMenu->addSeparator();
+ m_deleteGuide = new KAction(KIcon("edit-delete"), i18n("Delete Guide"), this);
+ connect(m_deleteGuide, SIGNAL(triggered()), this, SLOT(slotDeleteTimeLineGuide()));
+ m_timelineContextMenu->addAction(m_deleteGuide);
+
+ m_editGuide = new KAction(KIcon("document-properties"), i18n("Edit Guide"), this);
+ connect(m_editGuide, SIGNAL(triggered()), this, SLOT(slotEditTimeLineGuide()));
+ m_timelineContextMenu->addAction(m_editGuide);
}
void CustomTrackView::checkAutoScroll()
update();
}
-// virtual
-void CustomTrackView::resizeEvent(QResizeEvent * event)
-{
- QGraphicsView::resizeEvent(event);
-}
-
-// virtual
/** Zoom or move viewport on mousewheel
*
* If mousewheel+Ctrl, zooms in/out on the timeline.
{
// If mouse is at a border of the view, scroll
if (m_moveOpMode != SEEK) return;
- int pos = cursorPos();
- if (mapFromScene(pos, 0).x() < 7) {
+ if (mapFromScene(m_cursorPos, 0).x() < 3) {
horizontalScrollBar()->setValue(horizontalScrollBar()->value() - 2);
- setCursorPos(mapToScene(QPoint()).x() - 1);
QTimer::singleShot(200, this, SLOT(slotCheckPositionScrolling()));
-
- } else if (viewport()->width() - 5 < mapFromScene(pos + 1, 0).x()) {
+ setCursorPos(mapToScene(QPoint(-2, 0)).x());
+ } else if (viewport()->width() - 3 < mapFromScene(m_cursorPos + 1, 0).x()) {
horizontalScrollBar()->setValue(horizontalScrollBar()->value() + 2);
- setCursorPos(mapToScene(viewport()->width(), 0).x() + 1);
+ setCursorPos(mapToScene(QPoint(viewport()->width(), 0)).x() + 1);
QTimer::singleShot(200, this, SLOT(slotCheckPositionScrolling()));
}
}
int pos = event->x();
int mappedXPos = (int)(mapToScene(event->pos()).x() + 0.5);
emit mousePosition(mappedXPos);
+
if (event->buttons() & Qt::MidButton) return;
- if ((event->modifiers() == Qt::ControlModifier && m_tool != SPACERTOOL) || event->modifiers() == Qt::ShiftModifier) {
+ if (m_operationMode == RUBBERSELECTION || (event->modifiers() == Qt::ControlModifier && m_tool != SPACERTOOL)) {
QGraphicsView::mouseMoveEvent(event);
m_moveOpMode = NONE;
return;
m_dragItem->updateKeyFramePos(keyFramePos, pos);
}
- if (m_animation) delete m_animation;
+ delete m_animation;
m_animation = NULL;
- if (m_visualTip) delete m_visualTip;
+ delete m_visualTip;
m_visualTip = NULL;
return;
} else if (m_operationMode == MOVEGUIDE) {
- if (m_animation) delete m_animation;
+ delete m_animation;
m_animation = NULL;
- if (m_visualTip) delete m_visualTip;
+ delete m_visualTip;
m_visualTip = NULL;
QGraphicsView::mouseMoveEvent(event);
return;
return;
} else {
if (m_visualTip) {
- if (m_animation) delete m_animation;
+ delete m_animation;
m_animation = NULL;
m_animationTimer->stop();
delete m_visualTip;
m_moveOpMode = opMode;
setCursor(Qt::SplitHCursor);
} else {
- if (event->buttons() != Qt::NoButton && event->modifiers() == Qt::NoModifier) {
- m_moveOpMode = SEEK;
- setCursorPos(mappedXPos);
- slotCheckPositionScrolling();
- } else m_moveOpMode = NONE;
if (m_visualTip) {
- if (m_animation) delete m_animation;
+ delete m_animation;
m_animationTimer->stop();
m_animation = NULL;
delete m_visualTip;
}
setCursor(Qt::ArrowCursor);
+ if (event->buttons() != Qt::NoButton && event->modifiers() == Qt::NoModifier) {
+ QGraphicsView::mouseMoveEvent(event);
+ m_moveOpMode = SEEK;
+ setCursorPos(mappedXPos);
+ slotCheckPositionScrolling();
+ return;
+ } else m_moveOpMode = NONE;
}
QGraphicsView::mouseMoveEvent(event);
}
kDebug() << "mousePressEvent STARTED";
m_menuPosition = QPoint();
m_blockRefresh = true;
+ m_dragItem = NULL;
+ m_dragGuide = NULL;
bool collision = false;
if (m_tool != RAZORTOOL) activateMonitor();
}
// check item under mouse
- QList<QGraphicsItem *> collisionList = items(event->pos());
+ QList<QGraphicsItem *> collisionList = items(m_clickEvent);
if (event->modifiers() == Qt::ControlModifier && m_tool != SPACERTOOL && collisionList.count() == 0) {
setDragMode(QGraphicsView::ScrollHandDrag);
return;
}
- if (collisionList.count() == 1 && collisionList.at(0)->type() == GUIDEITEM) {
- // a guide item was pressed
- collisionList.at(0)->setFlag(QGraphicsItem::ItemIsMovable, true);
- m_dragItem = NULL;
- m_dragGuide = (Guide *) collisionList.at(0);
- collision = true;
- m_operationMode = MOVEGUIDE;
- // deselect all clips so that only the guide will move
- m_scene->clearSelection();
- resetSelectionGroup();
- updateSnapPoints(NULL);
- QGraphicsView::mousePressEvent(event);
- return;
+ // if a guide and a clip were pressed, just select the guide
+ for (int i = 0; i < collisionList.count(); ++i) {
+ if (collisionList.at(i)->type() == GUIDEITEM) {
+ // a guide item was pressed
+ m_dragGuide = (Guide *) collisionList.at(i);
+ if (event->button() == Qt::LeftButton) { // move it
+ m_dragGuide->setFlag(QGraphicsItem::ItemIsMovable, true);
+ collision = true;
+ m_operationMode = MOVEGUIDE;
+ // deselect all clips so that only the guide will move
+ m_scene->clearSelection();
+ resetSelectionGroup(false);
+ updateSnapPoints(NULL);
+ QGraphicsView::mousePressEvent(event);
+ return;
+ } else // show context menu
+ break;
+ }
}
- // Find first clip, transition or group under mouse
+ // Find first clip, transition or group under mouse (when no guides selected)
int ct = 0;
- m_dragItem = NULL;
AbstractGroupItem *dragGroup = NULL;
- while (ct < collisionList.count()) {
+ while (!m_dragGuide && ct < collisionList.count()) {
if (collisionList.at(ct)->type() == AVWIDGET || collisionList.at(ct)->type() == TRANSITIONWIDGET) {
m_dragItem = static_cast <AbstractClipItem *>(collisionList.at(ct));
m_dragItemInfo = m_dragItem->info();
m_scene->clearSelection();
m_dragItem->setSelected(true);
}
+ } else if (!m_dragGuide) {
+ // check if there is a guide close to mouse click
+ QList<QGraphicsItem *> guidesCollisionList = items(event->pos().x() - 5, event->pos().y(), 10, 2); // a rect of height < 2 does not always collide with the guide
+ for (int i = 0; i < guidesCollisionList.count(); i++) {
+ if (guidesCollisionList.at(i)->type() == GUIDEITEM) {
+ m_dragGuide = static_cast <Guide *>(guidesCollisionList.at(i));
+ break;
+ }
+ }
+ // keep this to support multiple guides context menu in the future (?)
+ /*if (guidesCollisionList.at(0)->type() != GUIDEITEM)
+ guidesCollisionList.removeAt(0);
+ }
+ if (!guidesCollisionList.isEmpty())
+ m_dragGuide = static_cast <Guide *>(guidesCollisionList.at(0));*/
}
+
m_operationMode = NONE;
displayContextMenu(event->globalPos(), m_dragItem, dragGroup);
m_menuPosition = m_clickEvent;
if (m_dragItem->type() == AVWIDGET && !m_dragItem->isItemLocked()) emit clipItemSelected((ClipItem*) m_dragItem);
else emit clipItemSelected(NULL);
- if (event->modifiers() != Qt::ControlModifier && (m_dragItem->isSelected() || (dragGroup && dragGroup->isSelected()))) {
- // If clicked item is selected, allow move
- if (dragGroup) dragGroup->setSelected(true);
- //event->accept();
- if (m_operationMode == NONE) QGraphicsView::mousePressEvent(event);
- } else {
+ if (event->modifiers() == Qt::ControlModifier || !(m_dragItem->isSelected() || (dragGroup && dragGroup->isSelected()))) {
resetSelectionGroup();
if (event->modifiers() != Qt::ControlModifier) m_scene->clearSelection();
dragGroup = NULL;
m_pasteEffectsAction->setEnabled(m_copiedItems.count() == 1);
}
+ // If clicked item is selected, allow move
+ //event->accept();
+ if (event->modifiers() != Qt::ControlModifier && (m_dragItem->isSelected() || (dragGroup && dragGroup->isSelected())) && m_operationMode == NONE) QGraphicsView::mousePressEvent(event);
+
m_clickPoint = QPoint((int)(mapToScene(event->pos()).x() - m_dragItem->startPos().frames(m_document->fps())), (int)(event->pos().y() - m_dragItem->pos().y()));
m_operationMode = m_dragItem->operationMode(mapToScene(event->pos()));
void CustomTrackView::displayContextMenu(QPoint pos, AbstractClipItem *clip, AbstractGroupItem *group)
{
+ m_deleteGuide->setEnabled(m_dragGuide != NULL);
+ m_editGuide->setEnabled(m_dragGuide != NULL);
if (clip == NULL) m_timelineContextMenu->popup(pos);
else if (group != NULL) {
m_changeSpeedAction->setEnabled(false);
int pos = effectParams.paramValue("out").toInt() - effectParams.paramValue("in").toInt();
clip->setFadeOut(pos);
}
-
}
}
m_document->setModified(true);
else newPos.cropStart = item->info().cropStart + (cutTime - info.startPos) * speed;
newPos.track = info.track;
ClipItem *dup = item->clone(newPos);
+ // remove unwanted effects (fade in) from 2nd part of cutted clip
+ int ix = dup->hasEffect(QString(), "fadein");
+ if (ix != -1) {
+ QDomElement oldeffect = item->effectAt(ix);
+ dup->deleteEffect(oldeffect.attribute("kdenlive_ix"));
+ }
+ ix = dup->hasEffect(QString(), "fade_from_black");
+ if (ix != -1) {
+ QDomElement oldeffect = item->effectAt(ix);
+ dup->deleteEffect(oldeffect.attribute("kdenlive_ix"));
+ }
item->resizeEnd(cutPos, false);
scene()->addItem(dup);
if (item->checkKeyFrames()) slotRefreshEffects(item);
const QPointF pos = mapToScene(event->pos());
if (m_selectionGroup && m_clipDrag) {
m_selectionGroup->setPos(pos.x(), pos.y());
+ emit mousePosition((int)(m_selectionGroup->scenePos().x() + 0.5));
event->setDropAction(Qt::MoveAction);
event->acceptProposedAction();
} else {
m_document->renderer()->mltInsertClip(info, item->xml(), item->baseClip()->producer(item->track()));
item->setSelected(true);
}
+ m_document->setModified(true);
m_changeSpeedAction->setEnabled(hasVideoClip);
m_pasteEffectsAction->setEnabled(m_copiedItems.count() == 1);
groupSelectedItems(true);
void CustomTrackView::addTrack(TrackInfo type, int ix)
{
- if (ix == -1) m_document->insertTrack(ix, type);
- else {
+ if (ix == -1 || ix == m_document->tracksCount()) {
+ m_document->insertTrack(ix, type);
+ m_document->renderer()->mltInsertTrack(1, type.type == VIDEOTRACK);
+ } else {
m_document->insertTrack(m_document->tracksCount() - ix, type);
// insert track in MLT playlist
m_document->renderer()->mltInsertTrack(m_document->tracksCount() - ix, type.type == VIDEOTRACK);
{
/*for (int i = 0; i < m_document->tracksCount(); i++)
kDebug() << "TRK " << i << " STATE: " << m_document->trackInfoAt(i).isMute << m_document->trackInfoAt(i).isBlind;*/
- int tracknumber = m_document->tracksCount() - ix;
- m_document->switchTrackAudio(tracknumber - 1, !m_document->trackInfoAt(tracknumber - 1).isMute);
- kDebug() << "NEXT TRK STATE: " << m_document->trackInfoAt(tracknumber - 1).isMute << m_document->trackInfoAt(tracknumber - 1).isBlind;
- m_document->renderer()->mltChangeTrackState(tracknumber, m_document->trackInfoAt(tracknumber - 1).isMute, m_document->trackInfoAt(tracknumber - 1).isBlind);
+ int tracknumber = m_document->tracksCount() - ix - 1;
+ m_document->switchTrackAudio(tracknumber, !m_document->trackInfoAt(tracknumber).isMute);
+ kDebug() << "NEXT TRK STATE: " << m_document->trackInfoAt(tracknumber).isMute << m_document->trackInfoAt(tracknumber).isBlind;
+ m_document->renderer()->mltChangeTrackState(tracknumber + 1, m_document->trackInfoAt(tracknumber).isMute, m_document->trackInfoAt(tracknumber).isBlind);
m_document->setModified(true);
}
int tracknumber = m_document->tracksCount() - ix - 1;
m_document->switchTrackLock(tracknumber, lock);
emit doTrackLock(ix, lock);
- QList<QGraphicsItem *> selection = items(0, ix * m_tracksHeight + m_tracksHeight / 2, mapFromScene(sceneRect().width(), 0).x(), m_tracksHeight / 2 - 2);
+ QList<QGraphicsItem *> selection = m_scene->items(0, ix * m_tracksHeight + m_tracksHeight / 2, sceneRect().width(), m_tracksHeight / 2 - 2);
for (int i = 0; i < selection.count(); i++) {
if (selection.at(i)->type() != AVWIDGET && selection.at(i)->type() != TRANSITIONWIDGET) continue;
void CustomTrackView::setCursorPos(int pos, bool seek)
{
+ if (pos == m_cursorPos) return;
emit cursorMoved((int)(m_cursorPos), (int)(pos));
m_cursorPos = pos;
- m_cursorLine->setPos(pos, 0);
- if (seek) m_document->renderer()->seek(GenTime(pos, m_document->fps()));
+ if (seek) m_document->renderer()->seek(GenTime(m_cursorPos, m_document->fps()));
else if (m_autoScroll) checkScrolling();
+ m_cursorLine->setPos(m_cursorPos, 0);
}
void CustomTrackView::updateCursorPos()
void CustomTrackView::checkScrolling()
{
- int vert = verticalScrollBar()->value();
- int hor = cursorPos();
- ensureVisible(hor, vert + 10, 2, 2, 50, 0);
+ ensureVisible(m_cursorPos, verticalScrollBar()->value() + 10, 2, 2, 50, 0);
}
void CustomTrackView::mouseReleaseEvent(QMouseEvent * event)
setCursor(Qt::ArrowCursor);
m_operationMode = NONE;
m_dragGuide->setFlag(QGraphicsItem::ItemIsMovable, false);
- EditGuideCommand *command = new EditGuideCommand(this, m_dragGuide->position(), m_dragGuide->label(), GenTime(m_dragGuide->pos().x(), m_document->fps()), m_dragGuide->label(), false);
- m_commandStack->push(command);
- m_dragGuide->updateGuide(GenTime(m_dragGuide->pos().x(), m_document->fps()));
+ GenTime newPos = GenTime(m_dragGuide->pos().x(), m_document->fps());
+ if (newPos != m_dragGuide->position()) {
+ EditGuideCommand *command = new EditGuideCommand(this, m_dragGuide->position(), m_dragGuide->label(), newPos, m_dragGuide->label(), false);
+ m_commandStack->push(command);
+ m_dragGuide->updateGuide(GenTime(m_dragGuide->pos().x(), m_document->fps()));
+ }
m_dragGuide = NULL;
m_dragItem = NULL;
return;
m_commandStack->push(moveCommand);
} else {
// undo last move and emit error message
- MoveClipCommand *command = new MoveClipCommand(this, info, m_dragItemInfo, true);
- m_commandStack->push(command);
+ bool snap = KdenliveSettings::snaptopoints();
+ KdenliveSettings::setSnaptopoints(false);
+ item->setPos((int) m_dragItemInfo.startPos.frames(m_document->fps()), (int)(m_dragItemInfo.track * m_tracksHeight + 1));
+ KdenliveSettings::setSnaptopoints(snap);
emit displayMessage(i18n("Cannot move clip to position %1", m_document->timecode().getTimecodeFromFrames(m_dragItemInfo.startPos.frames(m_document->fps()))), ErrorMessage);
}
m_document->setModified(true);
scene()->removeItem(item);
if (m_dragItem == item) m_dragItem = NULL;
delete item;
+ m_document->setModified(true);
m_document->renderer()->doRefresh();
}
ClipItem *item = static_cast <ClipItem *>(itemList.at(i));
if (item->parentItem()) resetGroup = true;
new AddTimelineClipCommand(this, item->xml(), item->clipProducer(), item->info(), item->effectList(), true, true, deleteSelected);
+ emit clipItemSelected(NULL);
} else if (itemList.at(i)->type() == TRANSITIONWIDGET) {
Transition *item = static_cast <Transition *>(itemList.at(i));
if (item->parentItem()) resetGroup = true;
info.endPos = item->endPos();
info.track = item->track();
new AddTransitionCommand(this, info, item->transitionEndTrack(), item->toXML(), true, true, deleteSelected);
+ emit transitionItemSelected(NULL);
}
}
+
m_commandStack->push(deleteSelected);
}
}
ClipItem *item = new ClipItem(baseclip, info, m_document->fps(), xml.attribute("speed", "1").toDouble());
item->setEffectList(effects);
+ if (xml.hasAttribute("audio_only")) item->setAudioOnly(true);
+ else if (xml.hasAttribute("video_only")) item->setVideoOnly(true);
scene()->addItem(item);
int tracknumber = m_document->tracksCount() - info.track - 1;
if (list.at(i)->type() == AVWIDGET) {
clip = static_cast <ClipItem *>(list.at(i));
if (clip->clipProducer() == clipId) {
- clip->refreshClip();
+ clip->refreshClip(true);
ItemInfo info = clip->info();
info.track = m_document->tracksCount() - clip->track();
m_document->renderer()->mltUpdateClip(info, clip->xml(), clip->baseClip()->producer());
void CustomTrackView::moveGroup(QList <ItemInfo> startClip, QList <ItemInfo> startTransition, const GenTime offset, const int trackOffset, bool reverseMove)
{
// Group Items
- kDebug() << "//GRP MOVE, REVERS:" << reverseMove;
- kDebug() << "// GROUP MOV; OFFSET: " << offset.frames(25) << ", TK OFF: " << trackOffset;
+ /*kDebug() << "//GRP MOVE, REVERS:" << reverseMove;
+ kDebug() << "// GROUP MOV; OFFSET: " << offset.frames(25) << ", TK OFF: " << trackOffset;*/
resetSelectionGroup();
m_scene->clearSelection();
- QList<QGraphicsItem *> itemList = items();
- for (int i = 0; i < itemList.count(); i++) {
- if (itemList.at(i)->type() == AVWIDGET)
- kDebug() << "ITEM " << i << ": " << static_cast <AbstractClipItem *>(itemList.at(i))->startPos().frames(25) << ",REEL: " << itemList.at(i)->scenePos();
- }
for (int i = 0; i < startClip.count(); i++) {
if (reverseMove) {
}
KdenliveSettings::setSnaptopoints(snap);
} else kDebug() << "///////// WARNING; NO GROUP TO MOVE";
-
- kDebug() << "///////// DONE+++++++++++++";
- itemList = items();
- for (int i = 0; i < itemList.count(); i++) {
- if (itemList.at(i)->type() == AVWIDGET)
- kDebug() << "ITEM " << i << ": " << static_cast <AbstractClipItem *>(itemList.at(i))->startPos().frames(25) << ",REEL: " << itemList.at(i)->scenePos();
- }
}
void CustomTrackView::moveTransition(const ItemInfo start, const ItemInfo end)
return (*g1).position() < (*g2).position();
}
+int CustomTrackView::hasGuide(int pos, int offset)
+{
+ for (int i = 0; i < m_guides.count(); i++) {
+ int guidePos = m_guides.at(i)->position().frames(m_document->fps());
+ if (qAbs(guidePos - pos) <= offset) return guidePos;
+ else if (guidePos > pos) return -1;
+ }
+ return -1;
+}
+
void CustomTrackView::editGuide(const GenTime oldPos, const GenTime pos, const QString &comment)
{
if (oldPos > GenTime() && pos > GenTime()) {
bool found = false;
for (int i = 0; i < m_guides.count(); i++) {
if (m_guides.at(i)->position() == oldPos) {
- Guide *item = m_guides.takeAt(i);
- delete item;
+ delete m_guides.takeAt(i);
found = true;
break;
}
}
}
-void CustomTrackView::slotEditGuide()
+void CustomTrackView::slotEditGuide(int guidePos)
{
- GenTime pos = GenTime(m_cursorPos, m_document->fps());
+ GenTime pos;
+ if (guidePos == -1) pos = GenTime(m_cursorPos, m_document->fps());
+ else pos = GenTime(guidePos, m_document->fps());
bool found = false;
for (int i = 0; i < m_guides.count(); i++) {
if (m_guides.at(i)->position() == pos) {
}
-void CustomTrackView::slotDeleteGuide()
+void CustomTrackView::slotEditTimeLineGuide()
{
- GenTime pos = GenTime(m_cursorPos, m_document->fps());
+ if (m_dragGuide == NULL) return;
+ CommentedTime guide = m_dragGuide->info();
+ MarkerDialog d(NULL, guide, m_document->timecode(), i18n("Edit Guide"), this);
+ if (d.exec() == QDialog::Accepted) {
+ EditGuideCommand *command = new EditGuideCommand(this, guide.time(), guide.comment(), d.newMarker().time(), d.newMarker().comment(), true);
+ m_commandStack->push(command);
+ }
+}
+
+void CustomTrackView::slotDeleteGuide(int guidePos)
+{
+ GenTime pos;
+ if (guidePos == -1) pos = GenTime(m_cursorPos, m_document->fps());
+ else pos = GenTime(guidePos, m_document->fps());
bool found = false;
for (int i = 0; i < m_guides.count(); i++) {
if (m_guides.at(i)->position() == pos) {
if (!found) emit displayMessage(i18n("No guide at cursor time"), ErrorMessage);
}
+
+void CustomTrackView::slotDeleteTimeLineGuide()
+{
+ if (m_dragGuide == NULL) return;
+ EditGuideCommand *command = new EditGuideCommand(this, m_dragGuide->position(), m_dragGuide->label(), GenTime(), QString(), true);
+ m_commandStack->push(command);
+}
+
+
void CustomTrackView::slotDeleteAllGuides()
{
QUndoCommand *deleteAll = new QUndoCommand();
m_scene->setScale(scaleFactor);
//scale(scaleFactor, 1);
m_animationTimer->stop();
- if (m_visualTip) {
- delete m_visualTip;
- m_visualTip = NULL;
- }
- if (m_animation) {
- delete m_animation;
- m_animation = NULL;
- }
+ delete m_visualTip;
+ m_visualTip = NULL;
+ delete m_animation;
+ m_animation = NULL;
//setSceneRect(0, 0, m_projectDuration + 100 * scaleFactor, sceneRect().height());
setMatrix(matrix);
void CustomTrackView::drawBackground(QPainter * painter, const QRectF & rect)
{
- QColor base = palette().button().color();
QRectF r = rect;
r.setWidth(r.width() + 1);
painter->setClipRect(r);
painter->drawLine(r.left(), 0, r.right(), 0);
uint max = m_document->tracksCount();
+ KColorScheme scheme(palette().currentColorGroup(), KColorScheme::Window);
+ QColor lockedColor = scheme.background(KColorScheme::NegativeBackground).color();
+ QColor audioColor = palette().alternateBase().color();
+ QColor base = scheme.background(KColorScheme::NormalBackground).color();
for (uint i = 0; i < max;i++) {
- if (m_document->trackInfoAt(max - i - 1).isLocked == true) painter->fillRect(r.left(), m_tracksHeight * i + 1, r.right() - r.left() + 1, m_tracksHeight - 1, QBrush(QColor(250, 250, 100)));
- else if (m_document->trackInfoAt(max - i - 1).type == AUDIOTRACK) painter->fillRect(r.left(), m_tracksHeight * i + 1, r.right() - r.left() + 1, m_tracksHeight - 1, QBrush(QColor(240, 240, 255)));
+ if (m_document->trackInfoAt(max - i - 1).isLocked == true) painter->fillRect(r.left(), m_tracksHeight * i + 1, r.right() - r.left() + 1, m_tracksHeight - 1, QBrush(lockedColor));
+ else if (m_document->trackInfoAt(max - i - 1).type == AUDIOTRACK) painter->fillRect(r.left(), m_tracksHeight * i + 1, r.right() - r.left() + 1, m_tracksHeight - 1, QBrush(audioColor));
painter->drawLine(r.left(), m_tracksHeight * (i + 1), r.right(), m_tracksHeight * (i + 1));
}
int lowerLimit = m_tracksHeight * m_document->tracksCount() + 1;
void CustomTrackView::copyClip()
{
- while (m_copiedItems.count() > 0) {
- delete m_copiedItems.takeFirst();
- }
+ qDeleteAll(m_copiedItems);
+ m_copiedItems.clear();
QList<QGraphicsItem *> itemList = scene()->selectedItems();
if (itemList.count() == 0) {
emit displayMessage(i18n("Select a clip before copying"), ErrorMessage);
}
}
}
- item->refreshClip();
+ item->refreshClip(false);
qApp->processEvents();
}
}
view.track_nb->setValue(ix);
d.setWindowTitle(i18n("Change Track Type"));
+ if (m_document->trackInfoAt(m_document->tracksCount() - ix - 1).type == VIDEOTRACK)
+ view.video_track->setChecked(true);
+ else
+ view.audio_track->setChecked(true);
+
if (d.exec() == QDialog::Accepted) {
TrackInfo info;
info.isLocked = false;
break;
}
}
+ clip->setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable);
m_document->clipManager()->removeGroup(grp);
scene()->destroyItemGroup(grp);
}
}
}
+
#include "customtrackview.moc"