]> git.sesse.net Git - kdenlive/commitdiff
mute / hide tracks
authorJean-Baptiste Mardelle <jb@kdenlive.org>
Fri, 21 Mar 2008 00:40:51 +0000 (00:40 +0000)
committerJean-Baptiste Mardelle <jb@kdenlive.org>
Fri, 21 Mar 2008 00:40:51 +0000 (00:40 +0000)
svn path=/branches/KDE4/; revision=2088

src/CMakeLists.txt
src/customtrackview.cpp
src/customtrackview.h
src/definitions.h
src/headertrack.cpp
src/headertrack.h
src/trackview.cpp
src/widgets/timeline_ui.ui
src/widgets/trackheader_ui.ui [new file with mode: 0644]

index 7a788bcc3d220db6cff89ad40c6ab9db62ce02fb..198fd38f1945f2f9ed88ab33d84d02319063d735 100644 (file)
@@ -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 
index fdf13920e3b38e75175727e3a97ba60c3f6c8415..035a1e1a2b50e9cf6f9b0d668476ecd4ab9a5c1c 100644 (file)
@@ -81,7 +81,7 @@ void CustomTrackView::checkAutoScroll() {
     m_autoScroll = KdenliveSettings::autoscroll();
 }
 
-QList <TRACKTYPE> CustomTrackView::tracksList() const {
+QList <TrackInfo> 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<QGraphicsItem *> 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));
     }
index 262f60b328893d06b920a4f473b0695c16bc19f1..f9861aa8336a8a35607108eed226b21dd3f0012a 100644 (file)
@@ -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 <TRACKTYPE> tracksList() const;
+    QList <TrackInfo> 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 <TRACKTYPE> m_tracksList;
+    QList <TrackInfo> m_tracksList;
     /** Get the index of the video track that is just below current track */
     int getPreviousVideoTrack(int track);
 
index 857ba6856a8b38575bc350bc0718b82c2457b8ce..20ea0ecc7b0bb84af45cf36b7a9858184cb8e35b 100644 (file)
@@ -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;
index c7af74ccae887ca94496933ae65642d3ec5e807a..54697818f88cbd8a0556da225e476be35528c18f 100644 (file)
 #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"
index 9f58b1faab446640c41664e11f6e5d0641e12f55..28c7a10633ae1ce18dad7b57fafd915bf7cac961 100644 (file)
@@ -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
index 39010e027c451092d55aa0b937629a7a955fd765..2b93f54c140f41e4c1ce9427d83f4693d6a6ca67 100644 (file)
@@ -185,13 +185,15 @@ void TrackView::refresh() {
 }
 
 void TrackView::slotRebuildTrackHeaders() {
-    QList <TRACKTYPE> list = m_trackview->tracksList();
+    QList <TrackInfo> list = m_trackview->tracksList();
     QList<HeaderTrack *> widgets = this->findChildren<HeaderTrack *>();
     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
index 2099f849564a50c1b0508498f2852b562c8b1c39..9edc78056ba8ef9e22463b40647f80d85a3a38ef 100644 (file)
     <widget class="QScrollArea" name="headers_area" >
      <property name="minimumSize" >
       <size>
-       <width>50</width>
+       <width>60</width>
        <height>0</height>
       </size>
      </property>
      <property name="maximumSize" >
       <size>
-       <width>50</width>
+       <width>60</width>
        <height>16777215</height>
       </size>
      </property>
      <property name="focusPolicy" >
       <enum>Qt::NoFocus</enum>
      </property>
+     <property name="verticalScrollBarPolicy" >
+      <enum>Qt::ScrollBarAlwaysOff</enum>
+     </property>
+     <property name="horizontalScrollBarPolicy" >
+      <enum>Qt::ScrollBarAlwaysOff</enum>
+     </property>
      <property name="widgetResizable" >
       <bool>true</bool>
      </property>
        <rect>
         <x>0</x>
         <y>0</y>
-        <width>44</width>
+        <width>54</width>
         <height>173</height>
        </rect>
       </property>
diff --git a/src/widgets/trackheader_ui.ui b/src/widgets/trackheader_ui.ui
new file mode 100644 (file)
index 0000000..6a4650a
--- /dev/null
@@ -0,0 +1,117 @@
+<ui version="4.0" >
+ <class>TrackHeader_UI</class>
+ <widget class="QWidget" name="TrackHeader_UI" >
+  <property name="geometry" >
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>50</width>
+    <height>51</height>
+   </rect>
+  </property>
+  <property name="windowTitle" >
+   <string>Form</string>
+  </property>
+  <layout class="QGridLayout" name="gridLayout_2" >
+   <property name="leftMargin" >
+    <number>0</number>
+   </property>
+   <property name="topMargin" >
+    <number>2</number>
+   </property>
+   <property name="rightMargin" >
+    <number>0</number>
+   </property>
+   <property name="bottomMargin" >
+    <number>2</number>
+   </property>
+   <item row="0" column="0" >
+    <widget class="QFrame" name="frame" >
+     <property name="frameShape" >
+      <enum>QFrame::StyledPanel</enum>
+     </property>
+     <property name="frameShadow" >
+      <enum>QFrame::Raised</enum>
+     </property>
+     <layout class="QGridLayout" name="gridLayout" >
+      <property name="margin" >
+       <number>0</number>
+      </property>
+      <property name="spacing" >
+       <number>0</number>
+      </property>
+      <item row="0" column="0" colspan="3" >
+       <widget class="QLabel" name="track_number" >
+        <property name="sizePolicy" >
+         <sizepolicy vsizetype="Maximum" hsizetype="MinimumExpanding" >
+          <horstretch>0</horstretch>
+          <verstretch>0</verstretch>
+         </sizepolicy>
+        </property>
+        <property name="text" >
+         <string>0</string>
+        </property>
+        <property name="alignment" >
+         <set>Qt::AlignRight|Qt::AlignTop|Qt::AlignTrailing</set>
+        </property>
+       </widget>
+      </item>
+      <item row="1" column="0" >
+       <widget class="QToolButton" name="buttonAudio" >
+        <property name="maximumSize" >
+         <size>
+          <width>22</width>
+          <height>22</height>
+         </size>
+        </property>
+        <property name="text" >
+         <string>A</string>
+        </property>
+        <property name="checkable" >
+         <bool>true</bool>
+        </property>
+        <property name="arrowType" >
+         <enum>Qt::NoArrow</enum>
+        </property>
+       </widget>
+      </item>
+      <item row="1" column="2" >
+       <widget class="QToolButton" name="buttonVideo" >
+        <property name="maximumSize" >
+         <size>
+          <width>22</width>
+          <height>22</height>
+         </size>
+        </property>
+        <property name="text" >
+         <string>V</string>
+        </property>
+        <property name="checkable" >
+         <bool>true</bool>
+        </property>
+        <property name="checked" >
+         <bool>false</bool>
+        </property>
+       </widget>
+      </item>
+      <item row="1" column="1" >
+       <spacer name="horizontalSpacer" >
+        <property name="orientation" >
+         <enum>Qt::Horizontal</enum>
+        </property>
+        <property name="sizeHint" stdset="0" >
+         <size>
+          <width>40</width>
+          <height>20</height>
+         </size>
+        </property>
+       </spacer>
+      </item>
+     </layout>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>