X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fclipproperties.cpp;h=8f1224fe5402be8889936c97408f29f7841a451f;hb=399672b3ce1b13d9d8263f83394dc51ba7a6c078;hp=825ca86ed291230c5e10d90c67c5469285b89196;hpb=c69ac32e6d351f7ceb968fd000eb67ea5a377db3;p=kdenlive diff --git a/src/clipproperties.cpp b/src/clipproperties.cpp index 825ca86e..8f1224fe 100644 --- a/src/clipproperties.cpp +++ b/src/clipproperties.cpp @@ -17,16 +17,17 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ -#include + +#include "clipproperties.h" +#include "kdenlivesettings.h" +#include "kthumb.h" +#include "markerdialog.h" #include #include #include -#include "kdenlivesettings.h" -#include "clipproperties.h" -#include "kthumb.h" -#include "markerdialog.h" +#include static const int VIDEOTAB = 0; static const int AUDIOTAB = 1; @@ -42,7 +43,14 @@ static const int TYPE_PNG = 1; static const int TYPE_BMP = 2; static const int TYPE_GIF = 3; -ClipProperties::ClipProperties(DocClipBase *clip, Timecode tc, double fps, QWidget * parent): QDialog(parent), m_tc(tc), m_clip(clip), m_fps(fps), m_clipNeedsRefresh(false), m_count(0) { +ClipProperties::ClipProperties(DocClipBase *clip, Timecode tc, double fps, QWidget * parent) : + QDialog(parent), + m_clip(clip), + m_tc(tc), + m_fps(fps), + m_count(0), + m_clipNeedsRefresh(false) +{ setFont(KGlobalSettings::toolBarFont()); m_view.setupUi(this); KUrl url = m_clip->fileURL(); @@ -149,6 +157,13 @@ ClipProperties::ClipProperties(DocClipBase *clip, Timecode tc, double fps, QWidg else if (path.endsWith("bmp")) m_view.image_type->setCurrentIndex(TYPE_BMP); else if (path.endsWith("gif")) m_view.image_type->setCurrentIndex(TYPE_GIF); m_view.slide_duration->setText(tc.getTimecodeFromFrames(props.value("ttl").toInt())); + + m_view.slide_duration_format->addItem(i18n("hh:mm:ss::ff")); + m_view.slide_duration_format->addItem(i18n("Frames")); + connect(m_view.slide_duration_format, SIGNAL(activated(int)), this, SLOT(slotUpdateDurationFormat(int))); + m_view.slide_duration_frames->setHidden(true); + m_view.luma_duration_frames->setHidden(true); + parseFolder(); m_view.luma_duration->setText(tc.getTimecodeFromFrames(props.value("luma_duration").toInt())); @@ -176,8 +191,8 @@ ClipProperties::ClipProperties(DocClipBase *clip, Timecode tc, double fps, QWidg m_view.luma_file->addItem(KIcon(folder + '/' + fname), fname, folder + '/' + fname); } - slotEnableLuma(m_view.slide_fade->isChecked()); - slotEnableLumaFile(m_view.slide_luma->isChecked()); + slotEnableLuma(m_view.slide_fade->checkState()); + slotEnableLumaFile(m_view.slide_luma->checkState()); if (!lumaFile.isEmpty()) { m_view.slide_luma->setChecked(true); @@ -199,8 +214,9 @@ ClipProperties::ClipProperties(DocClipBase *clip, Timecode tc, double fps, QWidg m_view.clip_fps->setText(props.value("fps")); if (props.contains("aspect_ratio")) m_view.clip_ratio->setText(props.value("aspect_ratio")); - - QPixmap pix = m_clip->thumbProducer()->getImage(url, m_clip->getClipThumbFrame(), 240, 180); + int width = 180.0 * KdenliveSettings::project_display_ratio(); + if (width % 2 == 1) width++; + QPixmap pix = m_clip->thumbProducer()->getImage(url, m_clip->getClipThumbFrame(), width, 180); m_view.clip_thumb->setPixmap(pix); if (t == IMAGE || t == VIDEO) m_view.tabWidget->removeTab(AUDIOTAB); } else { @@ -231,13 +247,15 @@ ClipProperties::ClipProperties(DocClipBase *clip, Timecode tc, double fps, QWidg connect(m_view.marker_delete, SIGNAL(clicked()), this, SLOT(slotDeleteMarker())); connect(m_view.markers_list, SIGNAL(doubleClicked(const QModelIndex &)), this, SLOT(slotEditMarker())); - adjustSize(); + //adjustSize(); } -void ClipProperties::slotEnableLuma(int state) { +void ClipProperties::slotEnableLuma(int state) +{ bool enable = false; if (state == Qt::Checked) enable = true; m_view.luma_duration->setEnabled(enable); + m_view.luma_duration_frames->setEnabled(enable); m_view.slide_luma->setEnabled(enable); if (enable) { m_view.luma_file->setEnabled(m_view.slide_luma->isChecked()); @@ -246,7 +264,8 @@ void ClipProperties::slotEnableLuma(int state) { m_view.luma_softness->setEnabled(m_view.label_softness->isEnabled()); } -void ClipProperties::slotEnableLumaFile(int state) { +void ClipProperties::slotEnableLumaFile(int state) +{ bool enable = false; if (state == Qt::Checked) enable = true; m_view.luma_file->setEnabled(enable); @@ -254,10 +273,11 @@ void ClipProperties::slotEnableLumaFile(int state) { m_view.label_softness->setEnabled(enable); } -void ClipProperties::slotFillMarkersList() { +void ClipProperties::slotFillMarkersList() +{ m_view.markers_list->clear(); QList < CommentedTime > marks = m_clip->commentedSnapMarkers(); - for (uint count = 0; count < marks.count(); ++count) { + for (int count = 0; count < marks.count(); ++count) { QString time = m_tc.getTimecode(marks[count].time(), m_tc.fps()); QStringList itemtext; itemtext << time << marks[count].comment(); @@ -265,7 +285,8 @@ void ClipProperties::slotFillMarkersList() { } } -void ClipProperties::slotAddMarker() { +void ClipProperties::slotAddMarker() +{ CommentedTime marker(GenTime(), i18n("Marker")); MarkerDialog d(m_clip, marker, m_tc, i18n("Add Marker"), this); if (d.exec() == QDialog::Accepted) { @@ -274,7 +295,8 @@ void ClipProperties::slotAddMarker() { QTimer::singleShot(500, this, SLOT(slotFillMarkersList())); } -void ClipProperties::slotEditMarker() { +void ClipProperties::slotEditMarker() +{ QList < CommentedTime > marks = m_clip->commentedSnapMarkers(); int pos = m_view.markers_list->currentIndex().row(); if (pos < 0 || pos > marks.count() - 1) return; @@ -285,7 +307,8 @@ void ClipProperties::slotEditMarker() { QTimer::singleShot(500, this, SLOT(slotFillMarkersList())); } -void ClipProperties::slotDeleteMarker() { +void ClipProperties::slotDeleteMarker() +{ QList < CommentedTime > marks = m_clip->commentedSnapMarkers(); int pos = m_view.markers_list->currentIndex().row(); if (pos < 0 || pos > marks.count() - 1) return; @@ -294,12 +317,14 @@ void ClipProperties::slotDeleteMarker() { QTimer::singleShot(500, this, SLOT(slotFillMarkersList())); } -const QString &ClipProperties::clipId() const { +const QString &ClipProperties::clipId() const +{ return m_clip->getId(); } -QMap ClipProperties::properties() { +QMap ClipProperties::properties() +{ QMap props; CLIPTYPE t = m_clip->clipType(); QMap old_props = m_clip->properties(); @@ -393,7 +418,11 @@ QMap ClipProperties::properties() { props["resource"] = new_path; kDebug() << "//// SLIDE EDIT, NEW:" << new_path << ", OLD; " << old_props.value("resource"); } - int duration = m_tc.getFrameCount(m_view.slide_duration->text(), m_fps); + int duration; + if (m_view.slide_duration_format->currentIndex() == 1) { + // we are in frames mode + duration = m_view.slide_duration_frames->value(); + } else duration = m_tc.getFrameCount(m_view.slide_duration->text(), m_fps); if (duration != old_props.value("ttl").toInt()) { m_clipNeedsRefresh = true; props["ttl"] = QString::number(duration); @@ -404,7 +433,11 @@ QMap ClipProperties::properties() { props["out"] = QString::number(duration * m_count); } if (m_view.slide_fade->isChecked()) { - int luma_duration = m_tc.getFrameCount(m_view.luma_duration->text(), m_fps); + int luma_duration; + if (m_view.slide_duration_format->currentIndex() == 1) { + // we are in frames mode + luma_duration = m_view.luma_duration_frames->value(); + } else luma_duration = m_tc.getFrameCount(m_view.luma_duration->text(), m_fps); if (luma_duration != old_props.value("luma_duration").toInt()) { m_clipNeedsRefresh = true; props["luma_duration"] = QString::number(luma_duration); @@ -426,11 +459,13 @@ QMap ClipProperties::properties() { return props; } -bool ClipProperties::needsTimelineRefresh() const { +bool ClipProperties::needsTimelineRefresh() const +{ return m_clipNeedsRefresh; } -void ClipProperties::parseFolder() { +void ClipProperties::parseFolder() +{ QDir dir(m_view.clip_path->text()); QStringList filters; @@ -468,13 +503,37 @@ void ClipProperties::parseFolder() { m_view.clip_thumb->setPixmap(pix); } -void ClipProperties::slotCheckMaxLength() { +void ClipProperties::slotCheckMaxLength() +{ + if (m_clip->maxDuration() == GenTime()) return; int duration = m_tc.getFrameCount(m_view.clip_duration->text(), m_fps); if (duration > m_clip->maxDuration().frames(m_fps)) { m_view.clip_duration->setText(m_tc.getTimecode(m_clip->maxDuration(), m_fps)); } } +void ClipProperties::slotUpdateDurationFormat(int ix) +{ + bool framesFormat = ix == 1; + if (framesFormat) { + // switching to frames count, update widget + m_view.slide_duration_frames->setValue(m_tc.getFrameCount(m_view.slide_duration->text(), m_tc.fps())); + m_view.luma_duration_frames->setValue(m_tc.getFrameCount(m_view.luma_duration->text(), m_tc.fps())); + m_view.slide_duration->setHidden(true); + m_view.luma_duration->setHidden(true); + m_view.slide_duration_frames->setHidden(false); + m_view.luma_duration_frames->setHidden(false); + } else { + // switching to timecode format + m_view.slide_duration->setText(m_tc.getTimecodeFromFrames(m_view.slide_duration_frames->value())); + m_view.luma_duration->setText(m_tc.getTimecodeFromFrames(m_view.luma_duration_frames->value())); + m_view.slide_duration_frames->setHidden(true); + m_view.luma_duration_frames->setHidden(true); + m_view.slide_duration->setHidden(false); + m_view.luma_duration->setHidden(false); + } +} + #include "clipproperties.moc"