]> git.sesse.net Git - kdenlive/commitdiff
Cleanup track header widget and fix crash when bringing context menu while editing...
authorJean-Baptiste Mardelle <jb@kdenlive.org>
Tue, 29 Jun 2010 13:30:12 +0000 (13:30 +0000)
committerJean-Baptiste Mardelle <jb@kdenlive.org>
Tue, 29 Jun 2010 13:30:12 +0000 (13:30 +0000)
svn path=/trunk/kdenlive/; revision=4556

src/headertrack.cpp
src/headertrack.h
src/widgets/trackheader_ui.ui

index b66ea102ec47b25574f843aad79354b05482e141..3165a482829aa3f80ecc9698586fde3478f95733 100644 (file)
 #include <QPainter>
 #include <QAction>
 #include <QTimer>
+#include <QColor>
 
 HeaderTrack::HeaderTrack(int index, TrackInfo info, int height, QWidget *parent) :
         QWidget(parent),
         m_index(index),
-        m_type(info.type)
+        m_type(info.type),
+        m_isSelected(false)
 {
     setFixedHeight(height);
     setupUi(this);
+    QColor col = track_number->palette().color(QPalette::Base);
+    track_number->setStyleSheet(QString("QLineEdit { background-color: transparent;} QLineEdit:hover{ background-color: rgb(%1, %2, %3);} QLineEdit:focus { background-color: rgb(%1, %2, %3);}").arg(col.red()).arg(col.green()).arg(col.blue()));
 
-    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"));
@@ -89,17 +91,17 @@ HeaderTrack::HeaderTrack(int index, TrackInfo info, int height, QWidget *parent)
         //horizontalSpacer;
     }
 
-    setContextMenuPolicy(Qt::ActionsContextMenu);
+    setContextMenuPolicy(Qt::DefaultContextMenu); //Qt::ActionsContextMenu);
     QAction *insertAction = new QAction(i18n("Insert Track"), this);
-    addAction(insertAction);
+    m_menu.addAction(insertAction);
     connect(insertAction, SIGNAL(triggered()), this, SLOT(slotAddTrack()));
 
     QAction *removeAction = new QAction(KIcon("edit-delete"), i18n("Delete Track"), this);
-    addAction(removeAction);
+    m_menu.addAction(removeAction);
     connect(removeAction, SIGNAL(triggered()), this, SLOT(slotDeleteTrack()));
 
     QAction *configAction = new QAction(KIcon("configure"), i18n("Configure Track"), this);
-    addAction(configAction);
+    m_menu.addAction(configAction);
     connect(configAction, SIGNAL(triggered()), this, SLOT(slotConfigTrack()));
 }
 
@@ -110,28 +112,45 @@ HeaderTrack::HeaderTrack(int index, TrackInfo info, int height, QWidget *parent)
 // 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);
     QWidget::mousePressEvent(event);
 }
 
+// virtual
+void HeaderTrack::contextMenuEvent(QContextMenuEvent * event)
+{
+    if (track_number->hasFocus()) {
+        track_number->clearFocus();
+        return;
+    }
+    m_menu.popup(event->globalPos());
+}
+
 void HeaderTrack::mouseDoubleClickEvent(QMouseEvent* event)
 {
+    if (track_number->hasFocus()) {
+        track_number->clearFocus();
+        return;
+    }
     slotConfigTrack();
     QWidget::mouseDoubleClickEvent(event);
 }
 
 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();
@@ -199,7 +218,7 @@ void HeaderTrack::slotAddTrack()
 
 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()
index 94aa47e7514f1622e3fffbc739df353ea096ecc9..907a0cd4cc078fc1c163e59a5e1f586bbe1196d5 100644 (file)
@@ -40,10 +40,14 @@ public:
 protected:
     virtual void mousePressEvent(QMouseEvent * event);
     virtual void mouseDoubleClickEvent(QMouseEvent * event);
+    virtual void contextMenuEvent(QContextMenuEvent * event);
 
 private:
     int m_index;
     TRACKTYPE m_type;
+    bool m_isSelected;
+    QMenu m_menu;
+    QString m_name;
 
 private slots:
     void switchAudio();
index 0642ef407e3a62924e501e72681bba86cbbfcc37..fe24eb3862e15e1abcebd292bc41bd708bf3a05b 100644 (file)
@@ -7,7 +7,7 @@
     <x>0</x>
     <y>0</y>
     <width>86</width>
-    <height>38</height>
+    <height>37</height>
    </rect>
   </property>
   <layout class="QGridLayout" name="gridLayout">
     <number>0</number>
    </property>
    <item row="0" column="0" colspan="4">
-    <widget class="QLabel" name="track_number">
+    <widget class="QLineEdit" name="track_number">
      <property name="sizePolicy">
-      <sizepolicy hsizetype="Preferred" vsizetype="Maximum">
+      <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
        <horstretch>0</horstretch>
        <verstretch>0</verstretch>
       </sizepolicy>
      </property>
-     <property name="text">
-      <string>0</string>
-     </property>
-     <property name="scaledContents">
+     <property name="frame">
       <bool>false</bool>
      </property>
-     <property name="alignment">
-      <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
-     </property>
-    </widget>
-   </item>
-   <item row="2" column="0" colspan="4">
-    <widget class="QLineEdit" name="inputName">
-     <property name="sizePolicy">
-      <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
-       <horstretch>0</horstretch>
-       <verstretch>0</verstretch>
-      </sizepolicy>
+     <property name="readOnly">
+      <bool>false</bool>
      </property>
     </widget>
    </item>
-   <item row="1" column="0" colspan="2">
+   <item row="1" column="1" colspan="2">
     <spacer name="verticalSpacer">
      <property name="orientation">
       <enum>Qt::Vertical</enum>
      <property name="sizeHint" stdset="0">
       <size>
        <width>20</width>
-       <height>40</height>
+       <height>1</height>
       </size>
      </property>
     </spacer>
    </item>
-   <item row="3" column="0">
+   <item row="2" column="0">
     <widget class="QToolButton" name="buttonLock">
      <property name="maximumSize">
       <size>
@@ -81,7 +68,7 @@
      </property>
     </widget>
    </item>
-   <item row="3" column="1">
+   <item row="2" column="1">
     <widget class="QToolButton" name="buttonAudio">
      <property name="maximumSize">
       <size>
      </property>
     </widget>
    </item>
-   <item row="3" column="2">
+   <item row="2" column="2">
     <widget class="QToolButton" name="buttonVideo">
      <property name="maximumSize">
       <size>
      </property>
     </widget>
    </item>
-   <item row="3" column="3">
+   <item row="2" column="3">
     <spacer name="horizontalSpacer">
      <property name="orientation">
       <enum>Qt::Horizontal</enum>