#include <QIcon>
#include <QMenu>
#include <QProcess>
+#include <QScrollBar>
#include <QHeaderView>
#include <QInputDialog>
#include <QtConcurrentRun>
/*QString style = "QToolButton {background-color: %1;border-style: outset;border-width: 2px;
border-radius: 5px;border-color: beige;}";*/
- KColorScheme scheme(palette().currentColorGroup(), KColorScheme::Window, KSharedConfig::openConfig(KdenliveSettings::colortheme()));
+ m_timeLine = new QTimeLine(500, this);
+ QObject::connect(m_timeLine, SIGNAL(valueChanged(qreal)), this, SLOT(slotTimeLineChanged(qreal)));
+ QObject::connect(m_timeLine, SIGNAL(finished()), this, SLOT(slotTimeLineFinished()));
+ hide();
+}
+
+const QString SmallInfoLabel::getStyleSheet(const QPalette &p)
+{
+ KColorScheme scheme(p.currentColorGroup(), KColorScheme::Window, KSharedConfig::openConfig(KdenliveSettings::colortheme()));
QColor bg = scheme.background(KColorScheme::LinkBackground).color();
QColor fg = scheme.foreground(KColorScheme::LinkText).color();
QString style = QString("QPushButton {padding:2px;background-color: rgb(%1, %2, %3);border-radius: 4px;border: none;color: rgb(%4, %5, %6)}").arg(bg.red()).arg(bg.green()).arg(bg.blue()).arg(fg.red()).arg(fg.green()).arg(fg.blue());
fg = scheme.foreground(KColorScheme::ActiveText).color();
style.append(QString("\nQPushButton:hover {padding:2px;background-color: rgb(%1, %2, %3);border-radius: 4px;border: none;color: rgb(%4, %5, %6)}").arg(bg.red()).arg(bg.green()).arg(bg.blue()).arg(fg.red()).arg(fg.green()).arg(fg.blue()));
- setStyleSheet(style);
- m_timeLine = new QTimeLine(500, this);
- QObject::connect(m_timeLine, SIGNAL(valueChanged(qreal)), this, SLOT(slotTimeLineChanged(qreal)));
- QObject::connect(m_timeLine, SIGNAL(finished()), this, SLOT(slotTimeLineFinished()));
- hide();
+ return style;
}
void SmallInfoLabel::slotTimeLineChanged(qreal value)
// small info button for pending jobs
m_infoLabel = new SmallInfoLabel(this);
+ m_infoLabel->setStyleSheet(SmallInfoLabel::getStyleSheet(palette()));
connect(this, SIGNAL(jobCount(int)), m_infoLabel, SLOT(slotSetJobCount(int)));
m_jobsMenu = new QMenu(this);
connect(m_jobsMenu, SIGNAL(aboutToShow()), this, SLOT(slotPrepareJobsMenu()));
frame->setLayout(box);
layout->addWidget(frame);
- m_listView = new ProjectListView;
+ m_listView = new ProjectListView(this);
layout->addWidget(m_listView);
#if KDE_IS_VERSION(4,7,0)
if (clip->getProperty("transparency").isEmpty() || clip->getProperty("transparency").toInt() == 0) {
if (transparency == "-") {
// first non transparent image
- transparency = "0";
+ transparency = '0';
}
else if (transparency == "1") {
// we have transparent and non transparent clips
else {
if (transparency == "-") {
// first transparent image
- transparency = "1";
+ transparency = '1';
}
else if (transparency == "0") {
// we have transparent and non transparent clips
p.next();
kDebug() << "Result: " << p.key() << " = " << p.value();
}*/
- emit showClipProperties(clipList, commonproperties);
+ if (clipList.isEmpty()) {
+ emit displayMessage(i18n("No available clip selected"), -2);
+ }
+ else emit showClipProperties(clipList, commonproperties);
}
void ProjectList::slotOpenClip()
item->referencedClip()->setPlaceHolder(true);
item->setProperty("file_hash", QString());
} else if (t == IMAGE) {
- clip->getProducer()->set("force_reload", 1);
+ //clip->getProducer() clip->getProducer()->set("force_reload", 1);
}
QDomElement e = item->toXml();
if (item) {
item->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled | Qt::ItemIsDropEnabled);
int height = m_listView->iconSize().height();
+ if (m_render == NULL) {
+ kDebug() << "********* ERROR, NULL RENDR";
+ return;
+ }
int width = (int)(height * m_render->dar());
QPixmap pixmap = qVariantValue<QPixmap>(item->data(0, Qt::DecorationRole));
if (pixmap.isNull()) {
item->setData(0, Qt::DecorationRole, pixmap);
if (item->referencedClip()) {
item->referencedClip()->setPlaceHolder(true);
- if (m_render == NULL) {
- kDebug() << "********* ERROR, NULL RENDR";
- return;
- }
Mlt::Producer *newProd = m_render->invalidProducer(id);
if (item->referencedClip()->getProducer()) {
Mlt::Properties props(newProd->get_properties());
m_proxyAction->setEnabled(false);
return;
}
- m_proxyAction->setEnabled(useProxy());
+ bool enabled = useProxy();
+ if (clip->referencedClip() && !clip->referencedClip()->getProperty("_missingsource").isEmpty()) enabled = false;
+ m_proxyAction->setEnabled(enabled);
m_proxyAction->blockSignals(true);
m_proxyAction->setChecked(clip->hasProxy());
m_proxyAction->blockSignals(false);
emit projectModified();
EditClipCommand *command = new EditClipCommand(this, clip->clipId(), oldprops, newprops, false);
m_commandStack->push(command);
+ QTimer::singleShot(100, this, SLOT(slotCheckScrolling()));
}
}
}
}
+void ProjectList::slotCheckScrolling()
+{
+ m_listView->scrollToItem(m_listView->currentItem());
+}
+
void ProjectList::slotContextMenu(const QPoint &pos, QTreeWidgetItem *item)
{
bool enable = item ? true : false;
//m_listView->setEnabled(false);
const QString parent = clip->getProperty("groupid");
ProjectItem *item = NULL;
+ kDebug()<<"// Adding clip 1";
monitorItemEditing(false);
if (!parent.isEmpty()) {
FolderProjectItem *parentitem = getFolderItemById(parent);
if (item == NULL) {
item = new ProjectItem(m_listView, clip);
}
+ kDebug()<<"// Adding clip 2";
if (item->data(0, DurationRole).isNull()) item->setData(0, DurationRole, i18n("Loading"));
connect(clip, SIGNAL(createProxy(const QString &)), this, SLOT(slotCreateProxy(const QString &)));
connect(clip, SIGNAL(abortProxy(const QString &, const QString &)), this, SLOT(slotAbortProxy(const QString, const QString)));
DocClipBase *clip = parentItem->referencedClip();
if (!clip) return;
int pos = item->zone().x();
- QString cachedPixmap = m_doc->projectFolder().path(KUrl::AddTrailingSlash) + "thumbs/" + clip->getClipHash() + "#" + QString::number(pos) + ".png";
+ QString cachedPixmap = m_doc->projectFolder().path(KUrl::AddTrailingSlash) + "thumbs/" + clip->getClipHash() + '#' + QString::number(pos) + ".png";
if (QFile::exists(cachedPixmap)) {
QPixmap pix(cachedPixmap);
if (pix.isNull()) {
QString ProjectList::getExtensions()
{
// Build list of mime types
- QStringList mimeTypes = QStringList() << "application/x-kdenlive" << "application/x-kdenlivetitle" << "video/mlt-playlist" << "text/plain"
- << "video/x-flv" << "application/vnd.rn-realmedia" << "video/x-dv" << "video/dv" << "video/x-msvideo" << "video/x-matroska" << "video/mpeg" << "video/ogg" << "video/x-ms-wmv" << "video/mp4" << "video/quicktime" << "video/webm"
- << "audio/x-flac" << "audio/x-matroska" << "audio/mp4" << "audio/mpeg" << "audio/x-mp3" << "audio/ogg" << "audio/x-wav" << "audio/x-aiff" << "audio/aiff" << "application/ogg" << "application/mxf" << "application/x-shockwave-flash"
- << "image/gif" << "image/jpeg" << "image/png" << "image/x-tga" << "image/x-bmp" << "image/svg+xml" << "image/tiff" << "image/x-xcf" << "image/x-xcf-gimp" << "image/x-vnd.adobe.photoshop" << "image/x-pcx" << "image/x-exr";
+ QStringList mimeTypes = QStringList() << "application/x-kdenlive" << "application/x-kdenlivetitle" << "video/mlt-playlist" << "text/plain";
+
+ // Video mimes
+ mimeTypes << "video/x-flv" << "application/vnd.rn-realmedia" << "video/x-dv" << "video/dv" << "video/x-msvideo" << "video/x-matroska" << "video/mpeg" << "video/ogg" << "video/x-ms-wmv" << "video/mp4" << "video/quicktime" << "video/webm" << "video/3gpp";
+
+ // Audio mimes
+ mimeTypes << "audio/x-flac" << "audio/x-matroska" << "audio/mp4" << "audio/mpeg" << "audio/x-mp3" << "audio/ogg" << "audio/x-wav" << "audio/x-aiff" << "audio/aiff" << "application/ogg" << "application/mxf" << "application/x-shockwave-flash" << "audio/ac3";
+
+ // Image mimes
+ mimeTypes << "image/gif" << "image/jpeg" << "image/png" << "image/x-tga" << "image/x-bmp" << "image/svg+xml" << "image/tiff" << "image/x-xcf" << "image/x-xcf-gimp" << "image/x-vnd.adobe.photoshop" << "image/x-pcx" << "image/x-exr";
QString allExtensions;
foreach(const QString & mimeType, mimeTypes) {
l->addWidget(c);
l->addStretch(5);
f->setLayout(l);
- KFileDialog *d = new KFileDialog(KUrl("kfiledialog:///clipfolder"), dialogFilter, kapp->activeWindow(), f);
+ QPointer<KFileDialog> d = new KFileDialog(KUrl("kfiledialog:///clipfolder"), dialogFilter, kapp->activeWindow(), f);
d->setOperationMode(KFileDialog::Opening);
d->setMode(KFile::Files);
if (d->exec() == QDialog::Accepted) {
while (fileName.at(fileName.size() - 1).isDigit()) {
fileName.chop(1);
}
-
- m_doc->slotCreateSlideshowClipFile(fileName, pattern, count, m_timecode.reformatSeparators(KdenliveSettings::sequence_duration()),
- false, false, false,
- m_timecode.getTimecodeFromFrames(int(ceil(m_timecode.fps()))), QString(), 0,
- QString(), groupInfo.at(0), groupInfo.at(1));
+ QMap <QString, QString> properties;
+ properties.insert("name", fileName);
+ properties.insert("resource", pattern);
+ properties.insert("in", "0");
+ QString duration = m_timecode.reformatSeparators(KdenliveSettings::sequence_duration());
+ properties.insert("out", QString::number(m_doc->getFramePos(duration) * count));
+ properties.insert("ttl", QString::number(m_doc->getFramePos(duration)));
+ properties.insert("loop", QString::number(false));
+ properties.insert("crop", QString::number(false));
+ properties.insert("fade", QString::number(false));
+ properties.insert("luma_duration", QString::number(m_doc->getFramePos(m_timecode.getTimecodeFromFrames(int(ceil(m_timecode.fps()))))));
+ m_doc->slotCreateSlideshowClipFile(properties, groupInfo.at(0), groupInfo.at(1));
return;
}
}
if (!m_commandStack)
kDebug() << "!!!!!!!!!!!!!!!! NO CMD STK";
- QDialog *dia = new QDialog(this);
+ QPointer<QDialog> dia = new QDialog(this);
Ui::ColorClip_UI dia_ui;
dia_ui.setupUi(dia);
dia->setWindowTitle(i18n("Color Clip"));
if (dia->exec() == QDialog::Accepted) {
QStringList groupInfo = getGroup();
- m_doc->slotCreateSlideshowClipFile(dia->clipName(), dia->selectedPath(), dia->imageCount(), dia->clipDuration(),
- dia->loop(), dia->crop(), dia->fade(),
- dia->lumaDuration(), dia->lumaFile(), dia->softness(),
- dia->animation(), groupInfo.at(0), groupInfo.at(1));
+
+ QMap <QString, QString> properties;
+ properties.insert("name", dia->clipName());
+ properties.insert("resource", dia->selectedPath());
+ properties.insert("in", "0");
+ properties.insert("out", QString::number(m_doc->getFramePos(dia->clipDuration()) * dia->imageCount()));
+ properties.insert("ttl", QString::number(m_doc->getFramePos(dia->clipDuration())));
+ properties.insert("loop", QString::number(dia->loop()));
+ properties.insert("crop", QString::number(dia->crop()));
+ properties.insert("fade", QString::number(dia->fade()));
+ properties.insert("luma_duration", dia->lumaDuration());
+ properties.insert("luma_file", dia->lumaFile());
+ properties.insert("softness", QString::number(dia->softness()));
+ properties.insert("animation", dia->animation());
+
+ m_doc->slotCreateSlideshowClipFile(properties, groupInfo.at(0), groupInfo.at(1));
}
delete dia;
}
const QString path = m_doc->projectFolder().path(KUrl::AddTrailingSlash) + "titles/";
QStringList templateFiles = QDir(path).entryList(filter, QDir::Files);
- QDialog *dia = new QDialog(this);
+ QPointer<QDialog> dia = new QDialog(this);
Ui::TemplateClip_UI dia_ui;
dia_ui.setupUi(dia);
for (int i = 0; i < templateFiles.size(); ++i)
void ProjectList::slotReplyGetFileProperties(const QString &clipId, Mlt::Producer *producer, const stringMap &properties, const stringMap &metadata, bool replace)
{
QString toReload;
+ kDebug()<<"// CLIP LOADED 1;";
ProjectItem *item = getItemById(clipId);
int queue = m_render->processingItems();
if (item && producer) {
if (clip->getProperty("proxy").isEmpty()) {
KUrl proxyPath = m_doc->projectFolder();
proxyPath.addPath("proxy/");
- proxyPath.addPath(clip->getClipHash() + "." + (t == IMAGE ? "png" : m_doc->getDocumentProperty("proxyextension")));
+ proxyPath.addPath(clip->getClipHash() + '.' + (t == IMAGE ? "png" : m_doc->getDocumentProperty("proxyextension")));
QMap <QString, QString> newProps;
// insert required duration for proxy
if (t != IMAGE) newProps.insert("proxy_out", clip->producerProperty("out"));
if (queue == 0) {
monitorItemEditing(true);
if (item && m_thumbnailQueue.isEmpty()) {
+ kDebug()<<"// CLIP LOADED;";
if (!item->hasProxy() || m_render->activeClipId() == item->clipId())
m_listView->setCurrentItem(item);
bool updatedProfile = false;
} else {
// Create sequence
QStringList groupInfo = getGroup();
- m_doc->slotCreateSlideshowClipFile(fileName, pattern, count, m_timecode.reformatSeparators(KdenliveSettings::sequence_duration()),
- false, false, false,
- m_timecode.getTimecodeFromFrames(int(ceil(m_timecode.fps()))), QString(), 0,
- QString(), groupInfo.at(0), groupInfo.at(1));
+ QMap <QString, QString> properties;
+ properties.insert("name", fileName);
+ properties.insert("resource", pattern);
+ properties.insert("in", "0");
+ QString duration = m_timecode.reformatSeparators(KdenliveSettings::sequence_duration());
+ properties.insert("out", QString::number(m_doc->getFramePos(duration) * count));
+ properties.insert("ttl", QString::number(m_doc->getFramePos(duration)));
+ properties.insert("loop", QString::number(false));
+ properties.insert("crop", QString::number(false));
+ properties.insert("fade", QString::number(false));
+ properties.insert("luma_duration", m_timecode.getTimecodeFromFrames(int(ceil(m_timecode.fps()))));
+
+ m_doc->slotCreateSlideshowClipFile(properties, groupInfo.at(0), groupInfo.at(1));
}
} else emit displayMessage(i18n("Sequence not found"), -2);
}
if (!item|| item->referencedClip()->isPlaceHolder()) return;
QString source = item->clipUrl().path();
QString ext = source.section('.', -1);
- QString dest = source.section('.', 0, -2) + "_" + QString::number(zone.x()) + "." + ext;
+ QString dest = source.section('.', 0, -2) + '_' + QString::number(zone.x()) + '.' + ext;
double clipFps = item->referencedClip()->getProperty("fps").toDouble();
if (clipFps == 0) clipFps = m_fps;
QString timeIn = Timecode::getStringTimecode(in, clipFps, true);
QString timeOut = Timecode::getStringTimecode(duration, clipFps, true);
- QDialog *d = new QDialog(this);
+ QPointer<QDialog> d = new QDialog(this);
Ui::CutJobDialog_UI ui;
ui.setupUi(d);
ui.extra_params->setVisible(false);
d->adjustSize();
ui.button_more->setIcon(KIcon("configure"));
ui.add_clip->setChecked(KdenliveSettings::add_clip_cut());
- ui.extra_params->setPlainText(params.simplified().section(" ", 0, -2));
+ ui.extra_params->setPlainText(params.simplified().section(' ', 0, -2));
QString mess = desc;
- mess.append(" " + i18np("(%1 clip)", "(%1 clips)", ids.count()));
+ mess.append(' ' + i18np("(%1 clip)", "(%1 clips)", ids.count()));
ui.info_label->setText(mess);
if (d->exec() != QDialog::Accepted) {
delete d;
QMap <QString, QString> oldProps;// = clip->properties();
oldProps.insert("proxy", QString());
QMap <QString, QString> newProps;
- newProps.insert("proxy", proxydir + item->referencedClip()->getClipHash() + "." + m_doc->getDocumentProperty("proxyextension"));
+ newProps.insert("proxy", proxydir + item->referencedClip()->getClipHash() + '.' + m_doc->getDocumentProperty("proxyextension"));
new EditClipCommand(this, clip->getId(), oldProps, newProps, true, command);
}
}
//oldProps = clip->properties();
if (doProxy) {
newProps.clear();
- QString path = proxydir + clip->getClipHash() + "." + (t == IMAGE ? "png" : m_doc->getDocumentProperty("proxyextension"));
+ QString path = proxydir + clip->getClipHash() + '.' + (t == IMAGE ? "png" : m_doc->getDocumentProperty("proxyextension"));
// insert required duration for proxy
newProps.insert("proxy_out", clip->producerProperty("out"));
newProps.insert("proxy", path);
else {
destination = item->clipUrl().directory();
}
- ClipStabilize *d = new ClipStabilize(destination, ids.count(), filterName);
+ QPointer<ClipStabilize> d = new ClipStabilize(destination, ids.count(), filterName);
if (d->exec() == QDialog::Accepted) {
processClipJob(ids, d->destination(), d->autoAddClip(), d->params(), d->desc());
}
ProjectItem *item = getItemById(id);
if (!item) continue;
if (ids.count() == 1) {
- consumer += ":" + destination;
+ consumer += ':' + destination;
}
else {
- consumer += ":" + destination + item->clipUrl().fileName() + ".mlt";
+ consumer += ':' + destination + item->clipUrl().fileName() + ".mlt";
}
preParams << consumer << jobParams;
discardJobs(id);
}
+void ProjectList::updatePalette()
+{
+ m_infoLabel->setStyleSheet(SmallInfoLabel::getStyleSheet(QApplication::palette()));
+ m_listView->updateStyleSheet();
+}
+
#include "projectlist.moc"