X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fclipproperties.cpp;h=b448d45375124dfc2af5fa097131cbf4567d46d9;hb=b4fed78d531ebfe19f26d8fb3512690328b4a1a3;hp=8364d1adaf9a2a802fb9912c9f5fa4be7b9cfcb9;hpb=548782dfe8b4ec1edc0c15f0062f5a976f1c6ee3;p=kdenlive diff --git a/src/clipproperties.cpp b/src/clipproperties.cpp index 8364d1ad..b448d453 100644 --- a/src/clipproperties.cpp +++ b/src/clipproperties.cpp @@ -27,6 +27,19 @@ #include #include #include +#include +#include +#include + +#ifdef USE_NEPOMUK +#if KDE_IS_VERSION(4,6,0) +#include +#include +#include +#include +#endif +#endif + #include @@ -65,7 +78,7 @@ ClipProperties::ClipProperties(DocClipBase *clip, Timecode tc, double fps, QWidg QMap 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) { @@ -198,15 +211,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); } @@ -239,7 +282,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()); @@ -248,7 +290,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); @@ -364,7 +405,7 @@ ClipProperties::ClipProperties(DocClipBase *clip, Timecode tc, double fps, QWidg 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")); @@ -373,6 +414,13 @@ ClipProperties::ClipProperties(DocClipBase *clip, Timecode tc, double fps, QWidg new QTreeWidgetItem(m_view.clip_vproperties, QStringList() << i18n("Frame rate") << props.value("fps")); if (!m_view.clip_framerate->isEnabled()) m_view.clip_framerate->setValue(props.value("fps").toDouble()); } + + if (props.contains("progressive")) { + int scanning = props.value("progressive").toInt(); + QString txt = scanning == 1 ? i18n("Progressive") : i18n("Interlaced"); + new QTreeWidgetItem(m_view.clip_vproperties, QStringList() << i18n("Scanning") << txt); + } + if (props.contains("aspect_ratio")) new QTreeWidgetItem(m_view.clip_vproperties, QStringList() << i18n("Pixel aspect ratio") << props.value("aspect_ratio")); @@ -381,6 +429,7 @@ ClipProperties::ClipProperties(DocClipBase *clip, Timecode tc, double fps, QWidg if (props.contains("colorspace")) new QTreeWidgetItem(m_view.clip_vproperties, QStringList() << i18n("Colorspace") << ProfilesDialog::getColorspaceDescription(props.value("colorspace").toInt())); + int width = 180.0 * KdenliveSettings::project_display_ratio(); if (width % 2 == 1) width++; @@ -402,8 +451,7 @@ ClipProperties::ClipProperties(DocClipBase *clip, Timecode tc, double fps, QWidg m_view.clip_filesize->setHidden(true); m_view.label_size->setHidden(true); } - m_view.clip_duration->setInputMask(""); - m_view.clip_duration->setValidator(tc.validator()); + m_view.clip_duration->setInputMask(tc.mask()); m_view.clip_duration->setText(tc.getTimecode(m_clip->duration())); if (t != IMAGE && t != COLOR && t != TEXT) m_view.clip_duration->setReadOnly(true); else { @@ -419,6 +467,31 @@ ClipProperties::ClipProperties(DocClipBase *clip, Timecode tc, double fps, QWidg m_view.marker_delete->setIcon(KIcon("trash-empty")); m_view.marker_delete->setToolTip(i18n("Delete marker")); + // Check for Nepomuk metadata +#ifdef USE_NEPOMUK +#if KDE_IS_VERSION(4,6,0) + if (!url.isEmpty()) { + Nepomuk::ResourceManager::instance()->init(); + Nepomuk::Resource res( url.path() ); + // Check if file has a license + if (res.hasProperty(Nepomuk::Vocabulary::NIE::license())) { + QString ltype = res.property(Nepomuk::Vocabulary::NIE::licenseType()).toString(); + m_view.clip_license->setText(i18n("License: %1", res.property(Nepomuk::Vocabulary::NIE::license()).toString())); + if (ltype.startsWith("http")) { + m_view.clip_license->setUrl(ltype); + connect(m_view.clip_license, SIGNAL(leftClickedUrl(const QString &)), this, SLOT(slotOpenUrl(const QString &))); + } + } + else m_view.clip_license->setHidden(true); + } + else m_view.clip_license->setHidden(true); +#else + m_view.clip_license->setHidden(true); +#endif +#else + m_view.clip_license->setHidden(true); +#endif + slotFillMarkersList(); connect(m_view.marker_new, SIGNAL(clicked()), this, SLOT(slotAddMarker())); connect(m_view.marker_edit, SIGNAL(clicked()), this, SLOT(slotEditMarker())); @@ -428,7 +501,7 @@ ClipProperties::ClipProperties(DocClipBase *clip, Timecode tc, double fps, QWidg connect(this, SIGNAL(accepted()), this, SLOT(slotApplyProperties())); connect(m_view.buttonBox->button(QDialogButtonBox::Apply), SIGNAL(clicked()), this, SLOT(slotApplyProperties())); m_view.buttonBox->button(QDialogButtonBox::Apply)->setEnabled(false); - //adjustSize(); + adjustSize(); } @@ -584,8 +657,10 @@ ClipProperties::~ClipProperties() void ClipProperties::slotApplyProperties() { - if (m_clip != NULL) - emit applyNewClipProperties(m_clip->getId(), m_clip->properties(), properties(), needsTimelineRefresh(), needsTimelineReload()); + if (m_clip != NULL) { + QMap props = properties(); + emit applyNewClipProperties(m_clip->getId(), m_clip->currentProperties(props), props, needsTimelineRefresh(), needsTimelineReload()); + } m_view.buttonBox->button(QDialogButtonBox::Apply)->setEnabled(false); } @@ -681,6 +756,7 @@ const QString &ClipProperties::clipId() const QMap ClipProperties::properties() { QMap props; + QLocale locale; CLIPTYPE t = UNKNOWN; if (m_clip != NULL) { t = m_clip->clipType(); @@ -711,7 +787,7 @@ QMap 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") && !m_old_props.value("force_fps").isEmpty()) { @@ -989,6 +1065,19 @@ 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; +} + +void ClipProperties::slotOpenUrl(const QString &url) +{ + new KRun(KUrl(url), this); +} + #include "clipproperties.moc"