From 6f819aedcc2598e0e70218e8ba46e8afc9bf5c5e Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Mardelle Date: Fri, 21 Mar 2008 00:40:51 +0000 Subject: [PATCH] mute / hide tracks svn path=/branches/KDE4/; revision=2088 --- src/CMakeLists.txt | 1 + src/customtrackview.cpp | 29 +++++++-- src/customtrackview.h | 8 ++- src/definitions.h | 6 ++ src/headertrack.cpp | 30 +++++++-- src/headertrack.h | 14 ++-- src/trackview.cpp | 16 ++++- src/widgets/timeline_ui.ui | 12 +++- src/widgets/trackheader_ui.ui | 117 ++++++++++++++++++++++++++++++++++ 9 files changed, 207 insertions(+), 26 deletions(-) create mode 100644 src/widgets/trackheader_ui.ui diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 7a788bcc..198fd38f 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -44,6 +44,7 @@ kde4_add_ui_files(kdenlive_UI widgets/saveprofile_ui.ui widgets/transitionsettings_ui.ui widgets/configjogshuttle_ui.ui + widgets/trackheader_ui.ui ) set(kdenlive_SRCS diff --git a/src/customtrackview.cpp b/src/customtrackview.cpp index fdf13920..035a1e1a 100644 --- a/src/customtrackview.cpp +++ b/src/customtrackview.cpp @@ -81,7 +81,7 @@ void CustomTrackView::checkAutoScroll() { m_autoScroll = KdenliveSettings::autoscroll(); } -QList CustomTrackView::tracksList() const { +QList CustomTrackView::tracksList() const { return m_tracksList; } @@ -129,7 +129,7 @@ int CustomTrackView::getPreviousVideoTrack(int track) { int videoTracksCount = 0; track --; for (int i = track; i > -1; i--) { - if (m_tracksList.at(i) == VIDEOTRACK) return i + 1; + if (m_tracksList.at(i).type == VIDEOTRACK) return i + 1; } return 0; } @@ -573,7 +573,7 @@ void CustomTrackView::addTransition(int startTrack, GenTime startPos , QDomEleme void CustomTrackView::deleteTransition(int, GenTime, QDomElement e) { QMap < QString, QString> map; QDomNamedNodeMap attribs = e.attributes(); - m_document->renderer()->mltDeleteTransition(e.attribute("type"), m_tracksList.count() - 1 - e.attribute("transition_track").toInt(), m_tracksList.count() - e.attribute("transition_track").toInt() , + m_document->renderer()->mltDeleteTransition(e.attribute("type"), getPreviousVideoTrack(e.attribute("transition_track").toInt()), m_tracksList.count() - e.attribute("transition_track").toInt() , GenTime(e.attribute("start").toInt(), m_document->renderer()->fps()), GenTime(e.attribute("end").toInt(), m_document->renderer()->fps()), map); @@ -596,7 +596,7 @@ void CustomTrackView::updateTransition(int track, GenTime pos, QDomElement oldTr ) map[attribs.item(i).nodeName()] = attribs.item(i).nodeValue(); } - m_document->renderer()->mltUpdateTransition(oldTransition.attribute("type"),transition.attribute("type"), m_tracksList.count() - 1 - transition.attribute("transition_track").toInt(), m_tracksList.count() - transition.attribute("transition_track").toInt() , + m_document->renderer()->mltUpdateTransition(oldTransition.attribute("type"), transition.attribute("type"), m_tracksList.count() - 1 - transition.attribute("transition_track").toInt(), m_tracksList.count() - transition.attribute("transition_track").toInt() , GenTime(transition.attribute("start").toInt(), m_document->renderer()->fps()), GenTime(transition.attribute("end").toInt(), m_document->renderer()->fps()), map); @@ -663,16 +663,17 @@ Qt::DropActions CustomTrackView::supportedDropActions() const { } void CustomTrackView::setDuration(int duration) { - //kDebug() << "///////////// PRO DUR: " << duration << ", height: " << 50 * m_tracksList.count(); + kDebug() << "///////////// PRO DUR: " << duration << ", SCALE. " << m_scale << ", height: " << 50 * m_tracksList.count(); m_projectDuration = duration; scene()->setSceneRect(0, 0, (m_projectDuration + 500) * m_scale, scene()->sceneRect().height()); //50 * m_tracksCount); + horizontalScrollBar()->setMaximum((m_projectDuration + 500) * m_scale); } int CustomTrackView::duration() const { return m_projectDuration; } -void CustomTrackView::addTrack(TRACKTYPE type) { +void CustomTrackView::addTrack(TrackInfo type) { m_tracksList << type; m_cursorLine->setLine(m_cursorLine->line().x1(), 0, m_cursorLine->line().x1(), m_tracksHeight * m_tracksList.count()); setSceneRect(0, 0, sceneRect().width(), m_tracksHeight * m_tracksList.count()); @@ -686,6 +687,20 @@ void CustomTrackView::removeTrack() { m_cursorLine->setLine(m_cursorLine->line().x1(), 0, m_cursorLine->line().x1(), m_tracksHeight * m_tracksList.count()); } + +void CustomTrackView::slotSwitchTrackAudio(int ix) { + int tracknumber = m_tracksList.count() - ix; + kDebug() << "///// MUTING TRK: " << ix << "; PL NUM: " << tracknumber; + m_tracksList[tracknumber - 1].isMute = !m_tracksList.at(tracknumber - 1).isMute; + m_document->renderer()->mltChangeTrackState(tracknumber, m_tracksList.at(tracknumber - 1).isMute, m_tracksList.at(tracknumber - 1).isBlind); +} + +void CustomTrackView::slotSwitchTrackVideo(int ix) { + int tracknumber = m_tracksList.count() - ix; + m_tracksList[tracknumber - 1].isBlind = !m_tracksList.at(tracknumber - 1).isBlind; + m_document->renderer()->mltChangeTrackState(tracknumber, m_tracksList.at(tracknumber - 1).isMute, m_tracksList.at(tracknumber - 1).isBlind); +} + void CustomTrackView::deleteClip(int clipId) { QList itemList = items(); for (int i = 0; i < itemList.count(); i++) { @@ -890,7 +905,7 @@ void CustomTrackView::drawBackground(QPainter * painter, const QRectF & rect) { painter->drawLine(rectInView.left(), 0, rectInView.right(), 0); uint max = m_tracksList.count(); for (uint i = 0; i < max;i++) { - if (m_tracksList.at(max - i - 1) == AUDIOTRACK) painter->fillRect(rectInView.left(), m_tracksHeight * i + 1, rectInView.right() - rectInView.left() + 1, m_tracksHeight - 1, QBrush(QColor(240, 240, 255))); + if (m_tracksList.at(max - i - 1).type == AUDIOTRACK) painter->fillRect(rectInView.left(), m_tracksHeight * i + 1, rectInView.right() - rectInView.left() + 1, m_tracksHeight - 1, QBrush(QColor(240, 240, 255))); painter->drawLine(rectInView.left(), m_tracksHeight * (i + 1), rectInView.right(), m_tracksHeight * (i + 1)); //painter->drawText(QRectF(10, 50 * i, 100, 50 * i + 49), Qt::AlignLeft, i18n(" Track ") + QString::number(i + 1)); } diff --git a/src/customtrackview.h b/src/customtrackview.h index 262f60b3..f9861aa8 100644 --- a/src/customtrackview.h +++ b/src/customtrackview.h @@ -41,7 +41,7 @@ public: virtual void mousePressEvent(QMouseEvent * event); virtual void mouseReleaseEvent(QMouseEvent * event); virtual void mouseMoveEvent(QMouseEvent * event); - void addTrack(TRACKTYPE type); + void addTrack(TrackInfo type); void removeTrack(); int cursorPos(); void checkAutoScroll(); @@ -63,7 +63,7 @@ public: void deleteSelectedClips(); void setContextMenu(QMenu *timeline, QMenu *clip, QMenu *transition); void checkTrackHeight(); - QList tracksList() const; + QList tracksList() const; public slots: void setCursorPos(int pos, bool seek = true); @@ -75,6 +75,8 @@ public slots: void setDuration(int duration); void slotAddTransition(ClipItem* clip , QDomElement transition, GenTime startTime , int startTrack); void slotTransitionUpdated(QDomElement, QDomElement); + void slotSwitchTrackAudio(int ix); + void slotSwitchTrackVideo(int ix); protected: virtual void drawBackground(QPainter * painter, const QRectF & rect); @@ -120,7 +122,7 @@ private: QMenu *m_timelineContextMenu; QMenu *m_timelineContextClipMenu; QMenu *m_timelineContextTransitionMenu; - QList m_tracksList; + QList m_tracksList; /** Get the index of the video track that is just below current track */ int getPreviousVideoTrack(int track); diff --git a/src/definitions.h b/src/definitions.h index 857ba685..20ea0ecc 100644 --- a/src/definitions.h +++ b/src/definitions.h @@ -39,6 +39,12 @@ enum TRANSITIONTYPE { enum TRACKTYPE { AUDIOTRACK = 0, VIDEOTRACK = 1 }; +struct TrackInfo { + TRACKTYPE type; + bool isMute; + bool isBlind; +}; + struct MltVideoProfile { QString path; QString description; diff --git a/src/headertrack.cpp b/src/headertrack.cpp index c7af74cc..54697818 100644 --- a/src/headertrack.cpp +++ b/src/headertrack.cpp @@ -11,15 +11,33 @@ #include "kdenlivesettings.h" #include "headertrack.h" -HeaderTrack::HeaderTrack(int index, TRACKTYPE type, QWidget *parent) - : QWidget(parent), m_index(index), m_type(type) { +HeaderTrack::HeaderTrack(int index, TrackInfo info, QWidget *parent) + : QWidget(parent), m_index(index), m_type(info.type) { setFixedHeight(KdenliveSettings::trackheight()); - //setFixedWidth(30); - m_label = QString::number(m_index); + view.setupUi(this); + view.track_number->setText(QString::number(m_index)); + if (m_type == VIDEOTRACK) { + view.frame->setBackgroundRole(QPalette::AlternateBase); + view.frame->setAutoFillBackground(true); + } else { + view.buttonVideo->setHidden(true); + } + view.buttonVideo->setChecked(!info.isBlind); + view.buttonAudio->setChecked(!info.isMute); + connect(view.buttonVideo, SIGNAL(clicked()), this, SLOT(switchVideo())); + connect(view.buttonAudio, SIGNAL(clicked()), this, SLOT(switchAudio())); +} + +void HeaderTrack::switchVideo() { + emit switchTrackVideo(m_index); +} + +void HeaderTrack::switchAudio() { + emit switchTrackAudio(m_index); } // virtual -void HeaderTrack::paintEvent(QPaintEvent *e) { +/*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)); @@ -27,7 +45,7 @@ void HeaderTrack::paintEvent(QPaintEvent *e) { 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" diff --git a/src/headertrack.h b/src/headertrack.h index 9f58b1fa..28c7a106 100644 --- a/src/headertrack.h +++ b/src/headertrack.h @@ -2,23 +2,29 @@ #define HEADERTRACK_H #include "definitions.h" +#include "ui_trackheader_ui.h" class HeaderTrack : public QWidget { Q_OBJECT public: - HeaderTrack(int index, TRACKTYPE type, QWidget *parent = 0); + HeaderTrack(int index, TrackInfo info, QWidget *parent = 0); protected: - virtual void paintEvent(QPaintEvent * /*e*/); + //virtual void paintEvent(QPaintEvent * /*e*/); private: int m_index; - QString m_label; TRACKTYPE m_type; + Ui::TrackHeader_UI view; -public slots: +private slots: + void switchAudio(); + void switchVideo(); +signals: + void switchTrackAudio(int); + void switchTrackVideo(int); }; #endif diff --git a/src/trackview.cpp b/src/trackview.cpp index 39010e02..2b93f54c 100644 --- a/src/trackview.cpp +++ b/src/trackview.cpp @@ -185,13 +185,15 @@ void TrackView::refresh() { } void TrackView::slotRebuildTrackHeaders() { - QList list = m_trackview->tracksList(); + QList list = m_trackview->tracksList(); QList widgets = this->findChildren(); for (int i = 0; i < widgets.count(); i++) delete widgets.at(i); int max = list.count(); for (int i = 0; i < max; i++) { HeaderTrack *header = new HeaderTrack(i, list.at(max - i - 1), this); + connect(header, SIGNAL(switchTrackVideo(int)), m_trackview, SLOT(slotSwitchTrackVideo(int))); + connect(header, SIGNAL(switchTrackAudio(int)), m_trackview, SLOT(slotSwitchTrackAudio(int))); m_headersLayout->addWidget(header); } view->headers_container->adjustSize(); @@ -199,14 +201,22 @@ void TrackView::slotRebuildTrackHeaders() { int TrackView::slotAddAudioTrack(int ix, QDomElement xml) { kDebug() << "************* ADD AUDIO TRACK " << ix; - m_trackview->addTrack(AUDIOTRACK); + TrackInfo info; + info.type = AUDIOTRACK; + info.isMute = false; + info.isBlind = false; + m_trackview->addTrack(info); //documentTracks.insert(ix, track); return 0; //track->show(); } int TrackView::slotAddVideoTrack(int ix, QDomElement xml) { - m_trackview->addTrack(VIDEOTRACK); + TrackInfo info; + info.type = VIDEOTRACK; + info.isMute = false; + info.isBlind = false; + m_trackview->addTrack(info); int trackTop = KdenliveSettings::trackheight() * ix; // parse track diff --git a/src/widgets/timeline_ui.ui b/src/widgets/timeline_ui.ui index 2099f849..9edc7805 100644 --- a/src/widgets/timeline_ui.ui +++ b/src/widgets/timeline_ui.ui @@ -70,19 +70,25 @@ - 50 + 60 0 - 50 + 60 16777215 Qt::NoFocus + + Qt::ScrollBarAlwaysOff + + + Qt::ScrollBarAlwaysOff + true @@ -94,7 +100,7 @@ 0 0 - 44 + 54 173 diff --git a/src/widgets/trackheader_ui.ui b/src/widgets/trackheader_ui.ui new file mode 100644 index 00000000..6a4650aa --- /dev/null +++ b/src/widgets/trackheader_ui.ui @@ -0,0 +1,117 @@ + + TrackHeader_UI + + + + 0 + 0 + 50 + 51 + + + + Form + + + + 0 + + + 2 + + + 0 + + + 2 + + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + 0 + + + 0 + + + + + + 0 + 0 + + + + 0 + + + Qt::AlignRight|Qt::AlignTop|Qt::AlignTrailing + + + + + + + + 22 + 22 + + + + A + + + true + + + Qt::NoArrow + + + + + + + + 22 + 22 + + + + V + + + true + + + false + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + -- 2.39.2