X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fheadertrack.cpp;h=cef0b2e08de12340bb01b38ba96af280e4beabdf;hb=b6d6c25f1bd07f11a0ceaf32a3a5bcaeab367336;hp=b66ea102ec47b25574f843aad79354b05482e141;hpb=7bd462b3f3af359d9ed156b0d515ea1fcfee9bfb;p=kdenlive diff --git a/src/headertrack.cpp b/src/headertrack.cpp index b66ea102..cef0b2e0 100644 --- a/src/headertrack.cpp +++ b/src/headertrack.cpp @@ -19,31 +19,32 @@ #include "headertrack.h" +#include "effectslist.h" +#include "kdenlivesettings.h" #include #include #include -#include #include #include #include #include #include +#include -HeaderTrack::HeaderTrack(int index, TrackInfo info, int height, QWidget *parent) : +HeaderTrack::HeaderTrack(int index, TrackInfo info, int height, const QList &actions, QWidget *parent) : QWidget(parent), m_index(index), - m_type(info.type) + m_type(info.type), + m_isSelected(false) { setFixedHeight(height); setupUi(this); - QString name = info.trackName.isEmpty() ? QString::number(m_index) : info.trackName; - track_number->setText(name); - inputName->setText(name); - inputName->setHidden(true); - connect(inputName, SIGNAL(editingFinished()), this, SLOT(slotRenameTrack())); + m_name = info.trackName.isEmpty() ? QString::number(m_index) : info.trackName; + track_number->setText(m_name); + connect(track_number, SIGNAL(editingFinished()), this, SLOT(slotRenameTrack())); buttonVideo->setChecked(info.isBlind); buttonVideo->setToolTip(i18n("Hide track")); @@ -51,11 +52,9 @@ HeaderTrack::HeaderTrack(int index, TrackInfo info, int height, QWidget *parent) buttonAudio->setToolTip(i18n("Mute track")); buttonLock->setChecked(info.isLocked); buttonLock->setToolTip(i18n("Lock track")); - - QPalette p = palette(); - KColorScheme scheme(p.currentColorGroup(), KColorScheme::Window); - p.setColor(QPalette::Button, scheme.background(KColorScheme::ActiveBackground).color().darker(120)); - setPalette(p); + effect_label->setPixmap(KIcon("kdenlive-track_has_effect").pixmap(16, 16)); + updateEffectLabel(info.effectsList.effectNames()); + setAcceptDrops(true); if (m_type == VIDEOTRACK) { setBackgroundRole(QPalette::AlternateBase); @@ -90,48 +89,100 @@ HeaderTrack::HeaderTrack(int index, TrackInfo info, int height, QWidget *parent) } setContextMenuPolicy(Qt::ActionsContextMenu); - QAction *insertAction = new QAction(i18n("Insert Track"), this); - addAction(insertAction); - connect(insertAction, SIGNAL(triggered()), this, SLOT(slotAddTrack())); - - QAction *removeAction = new QAction(KIcon("edit-delete"), i18n("Delete Track"), this); - addAction(removeAction); - connect(removeAction, SIGNAL(triggered()), this, SLOT(slotDeleteTrack())); - - QAction *configAction = new QAction(KIcon("configure"), i18n("Configure Track"), this); - addAction(configAction); - connect(configAction, SIGNAL(triggered()), this, SLOT(slotConfigTrack())); + addActions(actions); } /*HeaderTrack::~HeaderTrack() { }*/ +void HeaderTrack::updateEffectLabel(const QStringList &effects) +{ + if (!effects.isEmpty()) { + effect_label->setHidden(false); + effect_label->setToolTip(effects.join("/")); + } else { + effect_label->setHidden(true); + effect_label->setToolTip(QString()); + } +} + // virtual void HeaderTrack::mousePressEvent(QMouseEvent * event) { - emit selectTrack(m_index); + if (track_number->hasFocus()) { + track_number->clearFocus(); + return; + } + if (!m_isSelected) emit selectTrack(m_index); + emit showTrackEffects(m_index); QWidget::mousePressEvent(event); } void HeaderTrack::mouseDoubleClickEvent(QMouseEvent* event) { - slotConfigTrack(); + if (track_number->hasFocus()) { + track_number->clearFocus(); + return; + } + emit configTrack(m_index); QWidget::mouseDoubleClickEvent(event); } +//virtual +void HeaderTrack::dropEvent(QDropEvent * event) +{ + const QString effects = QString::fromUtf8(event->mimeData()->data("kdenlive/effectslist")); + QDomDocument doc; + doc.setContent(effects, true); + QDomElement e = doc.documentElement(); + if (e.tagName() == "effectgroup") { + // dropped an effect group + QDomNodeList effectlist = e.elementsByTagName("effect"); + for (int i = 0; i < effectlist.count(); ++i) { + effectlist.at(i).toElement().removeAttribute("kdenlive_ix"); + } + } else { + // single effect dropped + e.removeAttribute("kdenlive_ix"); + } + emit selectTrack(m_index); + emit addTrackEffect(e, m_index); + /*if (scene() && !scene()->views().isEmpty()) { + event->accept(); + CustomTrackView *view = (CustomTrackView *) scene()->views()[0]; + if (view) view->slotAddEffect(e, m_info.startPos, track()); + }*/ +} + +//virtual +void HeaderTrack::dragEnterEvent(QDragEnterEvent *event) +{ + if (buttonLock->isChecked()) { + event->setAccepted(false); + } else { + if (event->mimeData()->hasFormat("kdenlive/effectslist")) { + const QString effects = QString::fromUtf8(event->mimeData()->data("kdenlive/effectslist")); + QDomDocument doc; + doc.setContent(effects, true); + if (doc.documentElement().attribute("id") != "speed") { + event->setAccepted(true); + } + } + } +} + void HeaderTrack::setSelectedIndex(int ix) { - track_number->setHidden(false); - inputName->setHidden(true); if (m_index == ix) { + m_isSelected = true; setBackgroundRole(QPalette::Button); setAutoFillBackground(true); - track_number->setHidden(true); - inputName->setHidden(false); } else if (m_type != VIDEOTRACK) { + m_isSelected = false; setAutoFillBackground(false); } else { + m_isSelected = false; setBackgroundRole(QPalette::AlternateBase); } update(); @@ -187,25 +238,11 @@ void HeaderTrack::slotDeleteTrack() QTimer::singleShot(500, this, SLOT(deleteTrack())); } -void HeaderTrack::deleteTrack() -{ - emit deleteTrack(m_index); -} - -void HeaderTrack::slotAddTrack() -{ - emit insertTrack(m_index); -} - void HeaderTrack::slotRenameTrack() { - emit renameTrack(m_index, inputName->text()); + if (m_name != track_number->text()) emit renameTrack(m_index, track_number->text()); } -void HeaderTrack::slotConfigTrack() -{ - emit configTrack(m_index); -} #include "headertrack.moc"