X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fheadertrack.cpp;h=73fc711fc6f293c98ae73d0761ce91b9389af43f;hb=56aee6aedeeed3efd10ada8fe3c229eddc01ef05;hp=4a759d742e53e8f843c4d46847935a486b19f096;hpb=9472299b931b35891fb78bc18ec06d921bf59a33;p=kdenlive diff --git a/src/headertrack.cpp b/src/headertrack.cpp index 4a759d74..73fc711f 100644 --- a/src/headertrack.cpp +++ b/src/headertrack.cpp @@ -19,138 +19,230 @@ #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, 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(KdenliveSettings::trackheight()); - m_view.setupUi(this); - m_view.track_number->setText(QString::number(m_index)); - m_view.buttonVideo->setChecked(!info.isBlind); - m_view.buttonVideo->setToolTip(i18n("Hide track")); - m_view.buttonAudio->setChecked(!info.isMute); - m_view.buttonAudio->setToolTip(i18n("Mute track")); - m_view.buttonLock->setChecked(info.isLocked); - m_view.buttonLock->setToolTip(i18n("Lock track")); - - if (m_type == VIDEOTRACK) { - m_view.frame->setBackgroundRole(QPalette::AlternateBase); - m_view.frame->setAutoFillBackground(true); - if (!info.isBlind) m_view.buttonVideo->setIcon(KIcon("kdenlive-show-video")); - else m_view.buttonVideo->setIcon(KIcon("kdenlive-hide-video")); + setFixedHeight(height); + setupUi(this); + + 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")); + buttonAudio->setChecked(info.isMute); + buttonAudio->setToolTip(i18n("Mute track")); + buttonLock->setChecked(info.isLocked); + buttonLock->setToolTip(i18n("Lock track")); + effect_label->setPixmap(KIcon("kdenlive-track_has_effect").pixmap(16, 16)); + updateEffectLabel(info.effectsList.effectNames()); + setAcceptDrops(true); + + if (m_type == VideoTrack) { + setBackgroundRole(QPalette::AlternateBase); + setAutoFillBackground(true); + if (!info.isBlind) + buttonVideo->setIcon(KIcon("kdenlive-show-video")); + else + buttonVideo->setIcon(KIcon("kdenlive-hide-video")); } else { - m_view.buttonVideo->setHidden(true); + buttonVideo->setHidden(true); + } + if (!info.isMute) + buttonAudio->setIcon(KIcon("kdenlive-show-audio")); + else + buttonAudio->setIcon(KIcon("kdenlive-hide-audio")); + + if (!info.isLocked) + buttonLock->setIcon(KIcon("kdenlive-unlock")); + else + buttonLock->setIcon(KIcon("kdenlive-lock")); + + connect(buttonVideo, SIGNAL(clicked()), this, SLOT(switchVideo())); + connect(buttonAudio, SIGNAL(clicked()), this, SLOT(switchAudio())); + connect(buttonLock, SIGNAL(clicked()), this, SLOT(switchLock())); + + // Don't show track buttons if size is too small + if (height < 40) { + buttonVideo->setHidden(true); + buttonAudio->setHidden(true); + buttonLock->setHidden(true); + //horizontalSpacer; } - if (!info.isMute) m_view.buttonAudio->setIcon(KIcon("kdenlive-show-audio")); - else m_view.buttonAudio->setIcon(KIcon("kdenlive-hide-audio")); - - if (!info.isLocked) m_view.buttonLock->setIcon(KIcon("kdenlive-unlock")); - else m_view.buttonLock->setIcon(KIcon("kdenlive-lock")); - - connect(m_view.buttonVideo, SIGNAL(clicked()), this, SLOT(switchVideo())); - connect(m_view.buttonAudio, SIGNAL(clicked()), this, SLOT(switchAudio())); - connect(m_view.buttonLock, SIGNAL(clicked()), this, SLOT(switchLock())); - m_contextMenu = new QMenu(this); + setContextMenuPolicy(Qt::ActionsContextMenu); + addActions(actions); +} - QAction *insertAction = new QAction(i18n("Insert Track"), this); - m_contextMenu->addAction(insertAction); - connect(insertAction, SIGNAL(triggered()), this, SLOT(slotAddTrack())); +/*HeaderTrack::~HeaderTrack() +{ +}*/ - QAction *removeAction = new QAction(KIcon("edit-delete"), i18n("Delete Track"), this); - m_contextMenu->addAction(removeAction); - connect(removeAction, SIGNAL(triggered()), this, SLOT(slotDeleteTrack())); +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()); + } +} - QAction *changeAction = new QAction(i18n("Change Track Type"), this); - m_contextMenu->addAction(changeAction); - connect(changeAction, SIGNAL(triggered()), this, SLOT(slotChangeTrack())); +// virtual +void HeaderTrack::mousePressEvent(QMouseEvent * event) +{ + if (track_number->hasFocus()) { + track_number->clearFocus(); + return; + } + if (!m_isSelected) emit selectTrack(m_index); + emit showTrackEffects(m_index); + QWidget::mousePressEvent(event); } -HeaderTrack::~HeaderTrack() +void HeaderTrack::mouseDoubleClickEvent(QMouseEvent* event) { - delete m_contextMenu; + if (track_number->hasFocus()) { + track_number->clearFocus(); + return; + } + emit configTrack(m_index); + QWidget::mouseDoubleClickEvent(event); } -void HeaderTrack::switchVideo() +//virtual +void HeaderTrack::dropEvent(QDropEvent * event) { - if (m_view.buttonVideo->isChecked()) { - m_view.buttonVideo->setIcon(KIcon("kdenlive-show-video")); + 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 { - m_view.buttonVideo->setIcon(KIcon("kdenlive-hide-video")); + // single effect dropped + e.removeAttribute("kdenlive_ix"); } - emit switchTrackVideo(m_index); + 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()); + }*/ } -void HeaderTrack::switchAudio() +//virtual +void HeaderTrack::dragEnterEvent(QDragEnterEvent *event) { - if (m_view.buttonAudio->isChecked()) { - m_view.buttonAudio->setIcon(KIcon("kdenlive-show-audio")); + if (buttonLock->isChecked()) { + event->setAccepted(false); } else { - m_view.buttonAudio->setIcon(KIcon("kdenlive-hide-audio")); + 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); + } + } } - emit switchTrackAudio(m_index); } -void HeaderTrack::switchLock(bool emitSignal) +void HeaderTrack::setSelectedIndex(int ix) { - if (m_view.buttonLock->isChecked()) { - m_view.buttonLock->setIcon(KIcon("kdenlive-lock")); + if (m_index == ix) { + m_isSelected = true; + setBackgroundRole(QPalette::Button); + setAutoFillBackground(true); + } else if (m_type != VideoTrack) { + m_isSelected = false; + setAutoFillBackground(false); } else { - m_view.buttonLock->setIcon(KIcon("kdenlive-unlock")); + m_isSelected = false; + setBackgroundRole(QPalette::AlternateBase); } - if (emitSignal) emit switchTrackLock(m_index); + update(); } +void HeaderTrack::adjustSize(int height) +{ + // Don't show track buttons if size is too small + bool smallTracks = height < 40; + if (m_type == VideoTrack) + buttonVideo->setHidden(smallTracks); + buttonAudio->setHidden(smallTracks); + buttonLock->setHidden(smallTracks); + setFixedHeight(height); +} -void HeaderTrack::setLock(bool lock) +void HeaderTrack::switchVideo() { - m_view.buttonLock->setChecked(lock); - switchLock(false); + if (buttonVideo->isChecked()) + buttonVideo->setIcon(KIcon("kdenlive-hide-video")); + else + buttonVideo->setIcon(KIcon("kdenlive-show-video")); + emit switchTrackVideo(m_index); } -void HeaderTrack::slotDeleteTrack() +void HeaderTrack::switchAudio() { - emit deleteTrack(m_index); + if (buttonAudio->isChecked()) + buttonAudio->setIcon(KIcon("kdenlive-hide-audio")); + else + buttonAudio->setIcon(KIcon("kdenlive-show-audio")); + emit switchTrackAudio(m_index); } -void HeaderTrack::slotAddTrack() +void HeaderTrack::switchLock(bool emitSignal) { - emit insertTrack(m_index); + if (buttonLock->isChecked()) + buttonLock->setIcon(KIcon("kdenlive-lock")); + else + buttonLock->setIcon(KIcon("kdenlive-unlock")); + if (emitSignal) + emit switchTrackLock(m_index); } -void HeaderTrack::slotChangeTrack() +void HeaderTrack::setLock(bool lock) { - emit changeTrack(m_index); + buttonLock->setChecked(lock); + switchLock(false); } -// virtual -void HeaderTrack::contextMenuEvent(QContextMenuEvent * event) +void HeaderTrack::slotDeleteTrack() { - m_contextMenu->popup(event->globalPos()); + QTimer::singleShot(500, this, SLOT(deleteTrack())); +} + +void HeaderTrack::slotRenameTrack() +{ + if (m_name != track_number->text()) emit renameTrack(m_index, track_number->text()); } -// virtual -/*void HeaderTrack::paintEvent(QPaintEvent *e) { - QRect region = e->rect(); - region.setTopLeft(QPoint(region.left() + 1, region.top() + 1)); - region.setBottomRight(QPoint(region.right() - 1, region.bottom() - 1)); - QPainter painter(this); - if (m_type == AUDIOTRACK) painter.fillRect(region, QBrush(QColor(240, 240, 255))); - else painter.fillRect(region, QBrush(QColor(255, 255, 255))); - painter.drawText(region, Qt::AlignCenter, m_label); -}*/ #include "headertrack.moc"