]> git.sesse.net Git - kdenlive/blobdiff - src/clipproperties.cpp
Fix a couple of compile warnings because of unused and uninitialized variables.
[kdenlive] / src / clipproperties.cpp
index c79a74b493d944e5c98fde876888e02c90100f8a..f0f3e05181123d62affaf61e1bf1259932b48712 100644 (file)
@@ -47,12 +47,16 @@ ClipProperties::ClipProperties(DocClipBase *clip, Timecode tc, double fps, QWidg
     m_fps(fps),
     m_count(0),
     m_clipNeedsRefresh(false),
-    m_clipNeedsReLoad(false),
-    m_propsDelegate(NULL)
+    m_clipNeedsReLoad(false)
 {
     setAttribute(Qt::WA_DeleteOnClose, true);
     setFont(KGlobalSettings::toolBarFont());
     m_view.setupUi(this);
+    
+    // force transparency is only for group properties, so hide it
+    m_view.clip_force_transparency->setHidden(true);
+    m_view.clip_transparency->setHidden(true);
+    
     KUrl url = m_clip->fileURL();
     m_view.clip_path->setText(url.path());
     m_view.clip_description->setText(m_clip->description());
@@ -61,7 +65,7 @@ ClipProperties::ClipProperties(DocClipBase *clip, Timecode tc, double fps, QWidg
     QMap <QString, QString> props = m_clip->properties();
     m_view.clip_force_out->setHidden(true);
     m_view.clip_out->setHidden(true);
-
+    
     // New display aspect ratio support
     if (props.contains("force_aspect_num") && props.value("force_aspect_num").toInt() > 0 &&
         props.contains("force_aspect_den") && props.value("force_aspect_den").toInt() > 0) {
@@ -194,15 +198,45 @@ ClipProperties::ClipProperties(DocClipBase *clip, Timecode tc, double fps, QWidg
     connect(m_view.clip_force_colorspace, SIGNAL(toggled(bool)), m_view.clip_colorspace, SLOT(setEnabled(bool)));
 
     if (props.contains("audiocodec"))
-        QTreeWidgetItem *item = new QTreeWidgetItem(m_view.clip_aproperties, QStringList() << i18n("Audio codec") << props.value("audiocodec"));
+        new QTreeWidgetItem(m_view.clip_aproperties, QStringList() << i18n("Audio codec") << props.value("audiocodec"));
 
     if (props.contains("channels"))
-        QTreeWidgetItem *item = new QTreeWidgetItem(m_view.clip_aproperties, QStringList() << i18n("Channels") << props.value("channels"));
+        new QTreeWidgetItem(m_view.clip_aproperties, QStringList() << i18n("Channels") << props.value("channels"));
 
     if (props.contains("frequency"))
-        QTreeWidgetItem *item = new QTreeWidgetItem(m_view.clip_aproperties, QStringList() << i18n("Frequency") << props.value("frequency"));
+        new QTreeWidgetItem(m_view.clip_aproperties, QStringList() << i18n("Frequency") << props.value("frequency"));
+    
 
     CLIPTYPE t = m_clip->clipType();
+    
+    if (props.contains("proxy") && props.value("proxy") != "-") {
+        KFileItem f(KFileItem::Unknown, KFileItem::Unknown, KUrl(props.value("proxy")), true);
+        QFrame* line = new QFrame();
+        line->setFrameShape(QFrame::HLine);
+        line->setFrameShadow(QFrame::Sunken);
+        m_proxyContainer = new QFrame();
+        m_proxyContainer->setFrameShape(QFrame::NoFrame);
+        QHBoxLayout *l = new QHBoxLayout;
+        l->addWidget(new QLabel(i18n("Proxy clip: %1").arg(KIO::convertSize(f.size()))));
+        l->addStretch(5);
+        QPushButton *pb = new QPushButton(i18n("Delete proxy"));
+        l->addWidget(pb);
+        connect(pb, SIGNAL(clicked()), this, SLOT(slotDeleteProxy()));
+        m_proxyContainer->setLayout(l);
+        if (t == IMAGE) {
+            m_view.tab_image->layout()->addWidget(line);
+            m_view.tab_image->layout()->addWidget(m_proxyContainer);
+        }
+        else if (t == AUDIO) {
+            m_view.tab_audio->layout()->addWidget(line);
+            m_view.tab_audio->layout()->addWidget(m_proxyContainer);
+        }
+        else {
+            m_view.tab_video->layout()->addWidget(line);
+            m_view.tab_video->layout()->addWidget(m_proxyContainer);
+        }
+    }
+    
     if (t != AUDIO && t != AV) {
         m_view.clip_force_aindex->setEnabled(false);
     }
@@ -235,7 +269,6 @@ ClipProperties::ClipProperties(DocClipBase *clip, Timecode tc, double fps, QWidg
         m_view.clip_color->setColor(QColor('#' + props.value("colour").right(8).left(6)));
         connect(m_view.clip_color, SIGNAL(changed(QColor)), this, SLOT(slotModified()));
     } else if (t == SLIDESHOW) {
-        bool isMime = true;
         if (url.fileName().startsWith(".all.")) {
             // the image sequence is defined by mimetype
             m_view.clip_path->setText(url.directory());
@@ -244,7 +277,6 @@ ClipProperties::ClipProperties(DocClipBase *clip, Timecode tc, double fps, QWidg
             m_view.slide_type_label->setHidden(true);
             m_view.image_type->setHidden(true);
             m_view.clip_path->setText(url.path());
-            isMime = false;
         }
 
         m_view.tabWidget->removeTab(METATAB);
@@ -352,16 +384,15 @@ ClipProperties::ClipProperties(DocClipBase *clip, Timecode tc, double fps, QWidg
         m_view.tabWidget->removeTab(SLIDETAB);
         m_view.tabWidget->removeTab(COLORTAB);
 
-
-
-        m_propsDelegate = new PropertiesViewDelegate(this);
-        m_view.clip_vproperties->setItemDelegate(m_propsDelegate);
-        m_view.clip_aproperties->setItemDelegate(m_propsDelegate);
+        PropertiesViewDelegate *del1 = new PropertiesViewDelegate(this);
+        PropertiesViewDelegate *del2 = new PropertiesViewDelegate(this);
+        m_view.clip_vproperties->setItemDelegate(del1);
+        m_view.clip_aproperties->setItemDelegate(del2);
         m_view.clip_aproperties->setStyleSheet(QString("QTreeWidget { background-color: transparent;}"));
         m_view.clip_vproperties->setStyleSheet(QString("QTreeWidget { background-color: transparent;}"));
 
         if (props.contains("videocodec"))
-            QTreeWidgetItem *item = new QTreeWidgetItem(m_view.clip_vproperties, QStringList() << i18n("Video codec") << props.value("videocodec"));
+            new QTreeWidgetItem(m_view.clip_vproperties, QStringList() << i18n("Video codec") << props.value("videocodec"));
 
         if (props.contains("frame_size"))
             new QTreeWidgetItem(m_view.clip_vproperties, QStringList() << i18n("Frame size") << props.value("frame_size"));
@@ -403,7 +434,10 @@ ClipProperties::ClipProperties(DocClipBase *clip, Timecode tc, double fps, QWidg
     m_view.clip_duration->setValidator(tc.validator());
     m_view.clip_duration->setText(tc.getTimecode(m_clip->duration()));
     if (t != IMAGE && t != COLOR && t != TEXT) m_view.clip_duration->setReadOnly(true);
-    else connect(m_view.clip_duration, SIGNAL(editingFinished()), this, SLOT(slotCheckMaxLength()));
+    else {
+        connect(m_view.clip_duration, SIGNAL(editingFinished()), this, SLOT(slotCheckMaxLength()));
+        connect(m_view.clip_duration, SIGNAL(textChanged(QString)), this, SLOT(slotModified()));
+    }
 
     // markers
     m_view.marker_new->setIcon(KIcon("document-new"));
@@ -438,6 +472,9 @@ ClipProperties::ClipProperties(QList <DocClipBase *>cliplist, Timecode tc, QMap
 {
     setFont(KGlobalSettings::toolBarFont());
     m_view.setupUi(this);
+    QString title = windowTitle();
+    title.append(" " + i18np("(%1 clip)", "(%1 clips)", cliplist.count()));
+    setWindowTitle(title);
     QMap <QString, QString> props = cliplist.at(0)->properties();
     m_old_props = commonproperties;
 
@@ -493,6 +530,10 @@ ClipProperties::ClipProperties(QList <DocClipBase *>cliplist, Timecode tc, QMap
         m_view.clip_vindex->setMaximum(props.value("video_max").toInt());
     }
     
+    m_view.clip_colorspace->addItem(ProfilesDialog::getColorspaceDescription(601), 601);
+    m_view.clip_colorspace->addItem(ProfilesDialog::getColorspaceDescription(709), 709);
+    m_view.clip_colorspace->addItem(ProfilesDialog::getColorspaceDescription(240), 240);
+    
     if (commonproperties.contains("force_colorspace") && !commonproperties.value("force_colorspace").isEmpty() && commonproperties.value("force_colorspace").toInt() != 0) {
         m_view.clip_force_colorspace->setChecked(true);
         m_view.clip_colorspace->setEnabled(true);
@@ -502,7 +543,25 @@ ClipProperties::ClipProperties(QList <DocClipBase *>cliplist, Timecode tc, QMap
     if (commonproperties.contains("full_luma") && !commonproperties.value("full_luma").isEmpty()) {
         m_view.clip_full_luma->setChecked(true);
     }
+    
+    if (commonproperties.contains("transparency")) {
+        // image transparency checkbox
+        int transparency = commonproperties.value("transparency").toInt();
+        if (transparency == 0) {
+            m_view.clip_force_transparency->setChecked(true);
+        }
+        else if (transparency == 1) {
+            m_view.clip_force_transparency->setChecked(true);
+            m_view.clip_transparency->setCurrentIndex(1);
+        }
+    }
+    else {
+        m_view.clip_force_transparency->setHidden(true);
+        m_view.clip_transparency->setHidden(true);
+    }
+    
 
+    connect(m_view.clip_force_transparency, SIGNAL(toggled(bool)), m_view.clip_transparency, SLOT(setEnabled(bool)));
     connect(m_view.clip_force_ar, SIGNAL(toggled(bool)), m_view.clip_ar_num, SLOT(setEnabled(bool)));
     connect(m_view.clip_force_ar, SIGNAL(toggled(bool)), m_view.clip_ar_den, SLOT(setEnabled(bool)));
     connect(m_view.clip_force_progressive, SIGNAL(toggled(bool)), m_view.clip_progressive, SLOT(setEnabled(bool)));
@@ -545,7 +604,10 @@ ClipProperties::ClipProperties(QList <DocClipBase *>cliplist, Timecode tc, QMap
 
 ClipProperties::~ClipProperties()
 {
-    if (m_propsDelegate) delete m_propsDelegate;
+    QAbstractItemDelegate *del1 = m_view.clip_vproperties->itemDelegate();
+    if (del1) delete del1;
+    QAbstractItemDelegate *del2 = m_view.clip_aproperties->itemDelegate();
+    if (del2) delete del2;
 }
 
 void ClipProperties::slotApplyProperties()
@@ -647,6 +709,7 @@ const QString &ClipProperties::clipId() const
 QMap <QString, QString> ClipProperties::properties()
 {
     QMap <QString, QString> props;
+    QLocale locale;
     CLIPTYPE t = UNKNOWN;
     if (m_clip != NULL) {
         t = m_clip->clipType();
@@ -664,11 +727,11 @@ QMap <QString, QString> ClipProperties::properties()
             m_clipNeedsRefresh = true;
         }
     } else {
-        if (m_old_props.contains("force_aspect_num")) {
+        if (m_old_props.contains("force_aspect_num") && !m_old_props.value("force_aspect_num").isEmpty()) {
             props["force_aspect_num"].clear();
             m_clipNeedsRefresh = true;
         }
-        if (m_old_props.contains("force_aspect_den")) {
+        if (m_old_props.contains("force_aspect_den") && !m_old_props.value("force_aspect_den").isEmpty()) {
             props["force_aspect_den"].clear();
             m_clipNeedsRefresh = true;
         }
@@ -677,10 +740,10 @@ QMap <QString, QString> ClipProperties::properties()
     double fps = m_view.clip_framerate->value();
     if (m_view.clip_force_framerate->isChecked()) {
         if (fps != m_old_props.value("force_fps").toDouble()) {
-            props["force_fps"] = QString::number(fps);
+            props["force_fps"] = locale.toString(fps);
             m_clipNeedsRefresh = true;
         }
-    } else if (m_old_props.contains("force_fps")) {
+    } else if (m_old_props.contains("force_fps") && !m_old_props.value("force_fps").isEmpty()) {
         props["force_fps"].clear();
         m_clipNeedsRefresh = true;
     }
@@ -690,7 +753,7 @@ QMap <QString, QString> ClipProperties::properties()
         if (progressive != m_old_props.value("force_progressive").toInt()) {
             props["force_progressive"] = QString::number(progressive);
         }
-    } else if (m_old_props.contains("force_progressive")) {
+    } else if (m_old_props.contains("force_progressive") && !m_old_props.value("force_progressive").isEmpty()) {
         props["force_progressive"].clear();
     }
 
@@ -699,7 +762,7 @@ QMap <QString, QString> ClipProperties::properties()
         if (fieldOrder != m_old_props.value("force_tff").toInt()) {
             props["force_tff"] = QString::number(fieldOrder);
         }
-    } else if (m_old_props.contains("force_tff")) {
+    } else if (m_old_props.contains("force_tff") && !m_old_props.value("force_tff").isEmpty()) {
         props["force_tff"].clear();
     }
 
@@ -708,7 +771,7 @@ QMap <QString, QString> ClipProperties::properties()
         if (threads != m_old_props.value("threads").toInt()) {
             props["threads"] = QString::number(threads);
         }
-    } else if (m_old_props.contains("threads")) {
+    } else if (m_old_props.contains("threads") && !m_old_props.value("threads").isEmpty()) {
         props["threads"].clear();
     }
 
@@ -717,7 +780,7 @@ QMap <QString, QString> ClipProperties::properties()
         if (vindex != m_old_props.value("video_index").toInt()) {
             props["video_index"] = QString::number(vindex);
         }
-    } else if (m_old_props.contains("video_index")) {
+    } else if (m_old_props.contains("video_index") && !m_old_props.value("video_index").isEmpty()) {
         props["video_index"].clear();
     }
 
@@ -726,7 +789,7 @@ QMap <QString, QString> ClipProperties::properties()
         if (aindex != m_old_props.value("audio_index").toInt()) {
             props["audio_index"] = QString::number(aindex);
         }
-    } else if (m_old_props.contains("audio_index")) {
+    } else if (m_old_props.contains("audio_index") && !m_old_props.value("audio_index").isEmpty()) {
         props["audio_index"].clear();
     }
     
@@ -736,7 +799,7 @@ QMap <QString, QString> ClipProperties::properties()
             props["force_colorspace"] = QString::number(colorspace);
             m_clipNeedsRefresh = true;
         }
-    } else if (m_old_props.contains("force_colorspace")) {
+    } else if (m_old_props.contains("force_colorspace") && !m_old_props.value("force_colorspace").isEmpty()) {
         props["force_colorspace"].clear();
         m_clipNeedsRefresh = true;
     }
@@ -744,10 +807,15 @@ QMap <QString, QString> ClipProperties::properties()
     if (m_view.clip_full_luma->isChecked()) {
         props["full_luma"] = QString::number(1);
         m_clipNeedsRefresh = true;
-    } else if (m_old_props.contains("full_luma")) {
+    } else if (m_old_props.contains("full_luma") && !m_old_props.value("full_luma").isEmpty()) {
         props["full_luma"].clear();
         m_clipNeedsRefresh = true;
     }
+    
+    if (m_view.clip_force_transparency->isChecked()) {
+        QString transp = QString::number(m_view.clip_transparency->currentIndex());
+        if (transp != m_old_props.value("transparency")) props["transparency"] = transp;
+    }
 
     // If we adjust several clips, return now
     if (m_clip == NULL) {
@@ -950,6 +1018,15 @@ void ClipProperties::slotUpdateDurationFormat(int ix)
     }
 }
 
+void ClipProperties::slotDeleteProxy()
+{
+      QString proxy = m_clip->getProperty("proxy");
+      if (proxy.isEmpty()) return;
+      emit deleteProxy(proxy);
+      if (m_proxyContainer) delete m_proxyContainer;
+}
+
 #include "clipproperties.moc"
 
 
+