<parameter type="bool" name="obscure" default="1">
<name>Obscure</name>
</parameter>
+ <parameter type="filterjob" filtertag="autotrack_rectangle:%geometry" filterparams="_serialize=1" consumer="null" consumerparams="all=1 terminate_on_pause=1" wantedproperties="motion_vector_list" finalfilter="autotrack_rectangle" extraparams="projecttreefilter">
+ <name>Analyse</name>
+ </parameter>
</effect>
m_view.marker_save->setToolTip(i18n("Save markers"));
m_view.marker_load->setIcon(KIcon("document-open"));
m_view.marker_load->setToolTip(i18n("Load markers"));
+ m_view.analysis_delete->setIcon(KIcon("trash-empty"));
+ m_view.analysis_delete->setToolTip(i18n("Delete analysis data"));
+ m_view.analysis_load->setIcon(KIcon("document-open"));
+ m_view.analysis_load->setToolTip(i18n("Load analysis data"));
+ m_view.analysis_save->setIcon(KIcon("document-save-as"));
+ m_view.analysis_save->setToolTip(i18n("Save analysis data"));
// Check for Nepomuk metadata
#ifdef USE_NEPOMUK
#endif
slotFillMarkersList(m_clip);
+ slotUpdateAnalysisData(m_clip);
+
connect(m_view.marker_new, SIGNAL(clicked()), this, SLOT(slotAddMarker()));
connect(m_view.marker_edit, SIGNAL(clicked()), this, SLOT(slotEditMarker()));
connect(m_view.marker_delete, SIGNAL(clicked()), this, SLOT(slotDeleteMarker()));
connect(m_view.marker_save, SIGNAL(clicked()), this, SLOT(slotSaveMarkers()));
connect(m_view.marker_load, SIGNAL(clicked()), this, SLOT(slotLoadMarkers()));
connect(m_view.markers_list, SIGNAL(doubleClicked(const QModelIndex &)), this, SLOT(slotEditMarker()));
-
+
+ connect(m_view.analysis_delete, SIGNAL(clicked()), this, SLOT(slotDeleteAnalysis()));
+ connect(m_view.analysis_save, SIGNAL(clicked()), this, SLOT(slotSaveAnalysis()));
+ connect(m_view.analysis_load, SIGNAL(clicked()), this, SLOT(slotLoadAnalysis()));
+
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);
m_view.label_softness->setEnabled(enable);
}
+void ClipProperties::slotUpdateAnalysisData(DocClipBase *clip)
+{
+ if (m_clip != clip) return;
+ m_view.analysis_list->clear();
+ QMap <QString, QString> analysis = clip->analysisData();
+ m_view.analysis_box->setHidden(analysis.isEmpty());
+ QMap<QString, QString>::const_iterator i = analysis.constBegin();
+ while (i != analysis.constEnd()) {
+ QStringList itemtext;
+ itemtext << i.key() << i.value();
+ (void) new QTreeWidgetItem(m_view.analysis_list, itemtext);
+ ++i;
+ }
+}
+
void ClipProperties::slotFillMarkersList(DocClipBase *clip)
{
if (m_clip != clip) return;
emit addMarker(m_clip->getId(), toDelete.at(i));
}
+void ClipProperties::slotDeleteAnalysis()
+{
+ QTreeWidgetItem *current = m_view.analysis_list->currentItem();
+ if (current) emit deleteAnalysis(m_clip->getId(), current->text(0));
+}
+
const QString &ClipProperties::clipId() const
{
return m_clip->getId();
public slots:
void slotFillMarkersList(DocClipBase *clip);
+ void slotUpdateAnalysisData(DocClipBase *clip);
private slots:
void parseFolder();
void slotOpenUrl(const QString &url);
void slotSaveMarkers();
void slotLoadMarkers();
+ void slotDeleteAnalysis();
private:
Ui::ClipProperties_UI m_view;
void applyNewClipProperties(const QString, QMap <QString, QString> , QMap <QString, QString> , bool, bool);
void saveMarkers(const QString &);
void loadMarkers(const QString &);
+ void deleteAnalysis(const QString &, const QString &);
};
commands/addeffectcommand.cpp
commands/addfoldercommand.cpp
commands/addmarkercommand.cpp
+ commands/addextradatacommand.cpp
commands/addtimelineclipcommand.cpp
commands/addtrackcommand.cpp
commands/addtransitioncommand.cpp
--- /dev/null
+/***************************************************************************
+ addextradatacommand.cpp - description
+ -------------------
+ begin : 2012
+ copyright : (C) 2012 by Jean-Baptiste Mardelle
+ email : jb@kdenlive.org
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+
+
+#include "addextradatacommand.h"
+#include "customtrackview.h"
+
+#include <KLocale>
+
+AddExtraDataCommand::AddExtraDataCommand(CustomTrackView *view, const QString&id, const QString&key, const QString &oldData, const QString &newData, QUndoCommand * parent) :
+ QUndoCommand(parent),
+ m_view(view),
+ m_oldData(oldData),
+ m_newData(newData),
+ m_key(key),
+ m_id(id)
+{
+ if (m_newData.isEmpty()) setText(i18n("Delete data"));
+ else setText(i18n("Add data"));
+}
+
+
+// virtual
+void AddExtraDataCommand::undo()
+{
+ m_view->addData(m_id, m_key, m_oldData);
+}
+// virtual
+void AddExtraDataCommand::redo()
+{
+ m_view->addData(m_id, m_key, m_newData);
+}
+
--- /dev/null
+/***************************************************************************
+ addextradatacommand.h - description
+ -------------------
+ begin : 2012
+ copyright : (C) 2012 by Jean-Baptiste Mardelle
+ email : jb@kdenlive.org
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+
+#ifndef EXTRADATACOMMAND_H
+#define EXTRADATACOMMAND_H
+
+#include <QUndoCommand>
+#include <QGraphicsView>
+#include <QPointF>
+#include <QDomElement>
+#include <KDebug>
+
+#include "gentime.h"
+#include "definitions.h"
+class CustomTrackView;
+
+
+class AddExtraDataCommand : public QUndoCommand
+{
+public:
+ AddExtraDataCommand(CustomTrackView *view, const QString&id, const QString&key, const QString &oldData, const QString &newData, QUndoCommand * parent = 0);
+ virtual void undo();
+ virtual void redo();
+
+private:
+ CustomTrackView *m_view;
+ QString m_oldData;
+ QString m_newData;
+ QString m_key;
+ QString m_id;
+};
+
+#endif
+
#include "commands/movetransitioncommand.h"
#include "commands/resizeclipcommand.h"
#include "commands/editguidecommand.h"
+#include "commands/addextradatacommand.h"
#include "commands/addtimelineclipcommand.h"
#include "commands/addeffectcommand.h"
#include "commands/editeffectcommand.h"
}
}
+void CustomTrackView::slotAddClipExtraData(const QString &id, const QString &key, const QString &data, QUndoCommand *groupCommand)
+{
+ DocClipBase *base = m_document->clipManager()->getClipById(id);
+ if (!base) return;
+ QMap <QString, QString> extraData = base->analysisData();
+ QString oldData = extraData.value(key);
+ AddExtraDataCommand *command = new AddExtraDataCommand(this, id, key, oldData, data, groupCommand);
+ if (!groupCommand) m_commandStack->push(command);
+}
+
void CustomTrackView::slotAddClipMarker(const QString &id, CommentedTime newMarker, QUndoCommand *groupCommand)
{
CommentedTime oldMarker = m_document->clipManager()->getClipById(id)->markerAt(newMarker.time());
void CustomTrackView::addMarker(const QString &id, const CommentedTime marker)
{
DocClipBase *base = m_document->clipManager()->getClipById(id);
+ if (base == NULL) return;
if (marker.markerType() < 0) base->deleteSnapMarker(marker.time());
else base->addSnapMarker(marker);
emit updateClipMarkers(base);
viewport()->update();
}
+void CustomTrackView::addData(const QString &id, const QString &key, const QString &data)
+{
+ DocClipBase *base = m_document->clipManager()->getClipById(id);
+ if (base == NULL) return;
+ base->setAnalysisData(key, data);
+ emit updateClipExtraData(base);
+ setDocumentModified();
+ viewport()->update();
+}
+
int CustomTrackView::hasGuide(int pos, int offset)
{
for (int i = 0; i < m_guides.count(); i++) {
void slotDeleteClipMarker(const QString &comment, const QString &id, const GenTime &position);
void slotDeleteAllClipMarkers(const QString &id);
void addMarker(const QString &id, const CommentedTime marker);
+ void addData(const QString &id, const QString &key, const QString &data);
void setScale(double scaleFactor, double verticalScale);
void deleteClip(const QString &clipId);
/** @brief Add effect to current clip */
void slotSwitchTrackVideo(int ix);
void slotSwitchTrackLock(int ix);
void slotUpdateClip(const QString &clipId, bool reload = true);
-
+
+ /** @brief Add extra data to a clip. */
+ void slotAddClipExtraData(const QString &id, const QString &key, const QString &data = QString(), QUndoCommand *groupCommand = 0);
/** @brief Creates a AddClipCommand to add, edit or delete a marker.
* @param id Id of the marker's clip
* @param t Position of the marker
void showClipFrame(DocClipBase *, QPoint, bool, const int);
void doTrackLock(int, bool);
void updateClipMarkers(DocClipBase *);
+ void updateClipExtraData(DocClipBase *);
void updateTrackHeaders();
void playMonitor();
/** @brief Monitor document changes (for example the presence of audio data in timeline for export widget.*/
return m_thumbProd->extractImage(frame, width, height);
}
+void DocClipBase::setAnalysisData(const QString &name, const QString &data)
+{
+ if (data.isEmpty()) m_analysisdata.remove(name);
+ else m_analysisdata.insert(name, data);
+}
+
+QMap <QString, QString> DocClipBase::analysisData() const
+{
+ return m_analysisdata;
+}
void cleanupProducers();
bool isClean() const;
bool getAudioThumbs();
+ void setAnalysisData(const QString &name, const QString &data);
+ QMap <QString, QString> analysisData() const;
private: // Private attributes
QMap <QString, QString> m_properties;
/** Holds clip metadata like author, copyright,... */
QMap <QString, QString> m_metadata;
+ /** Holds clip analysis data that can be used later to create markers or keyframes */
+ QMap <QString, QString> m_analysisdata;
/** Try to make sure we don't delete a producer while using it */
QMutex m_producerMutex;
}
connect (m_paramWidget, SIGNAL(parameterChanged(const QDomElement, const QDomElement, int)), this, SIGNAL(parameterChanged(const QDomElement, const QDomElement, int)));
- connect(m_paramWidget, SIGNAL(startFilterJob(QString,QString,QString,QString,QString,QString)), this, SIGNAL(startFilterJob(QString,QString,QString,QString,QString,QString)));
+ connect(m_paramWidget, SIGNAL(startFilterJob(QString,QString,QString,QString,QString,QString,QStringList)), this, SIGNAL(startFilterJob(QString,QString,QString,QString,QString,QString,QStringList)));
connect (this, SIGNAL(syncEffectsPos(int)), m_paramWidget, SIGNAL(syncEffectsPos(int)));
connect (m_paramWidget, SIGNAL(checkMonitorPosition(int)), this, SIGNAL(checkMonitorPosition(int)));
void checkMonitorPosition(int);
void seekTimeline(int);
/** @brief Start an MLT filter job on this clip. */
- void startFilterJob(QString filterName, QString filterParams, QString finalFilterName, QString consumer, QString consumerParams, QString properties);
+ void startFilterJob(QString filterName, QString filterParams, QString finalFilterName, QString consumer, QString consumerParams, QString properties, QStringList extraParams);
/** @brief An effect was reset, trigger param reload. */
void resetEffect(int ix);
/** @brief Ask for creation of a group. */
// Check drag & drop
currentEffect->installEventFilter( this );
connect(currentEffect, SIGNAL(parameterChanged(const QDomElement, const QDomElement, int)), this , SLOT(slotUpdateEffectParams(const QDomElement, const QDomElement, int)));
- connect(currentEffect, SIGNAL(startFilterJob(QString,QString,QString,QString,QString,QString)), this , SLOT(slotStartFilterJob(QString,QString,QString,QString,QString,QString)));
+ connect(currentEffect, SIGNAL(startFilterJob(QString,QString,QString,QString,QString,QString,QStringList)), this , SLOT(slotStartFilterJob(QString,QString,QString,QString,QString,QString,QStringList)));
connect(currentEffect, SIGNAL(deleteEffect(const QDomElement)), this , SLOT(slotDeleteEffect(const QDomElement)));
connect(currentEffect, SIGNAL(reloadEffects()), this , SIGNAL(reloadEffects()));
connect(currentEffect, SIGNAL(resetEffect(int)), this , SLOT(slotResetEffect(int)));
else emit changeEffectPosition(m_clipref, -1, indexes, endPos);
}
-void EffectStackView2::slotStartFilterJob(const QString&filterName, const QString&filterParams, const QString&finalFilterName, const QString&consumer, const QString&consumerParams, const QString&properties)
+void EffectStackView2::slotStartFilterJob(const QString&filterName, const QString&filterParams, const QString&finalFilterName, const QString&consumer, const QString&consumerParams, const QString&properties, const QStringList &extraParams)
{
if (!m_clipref) return;
- emit startFilterJob(m_clipref->info(), m_clipref->clipProducer(), filterName, filterParams, finalFilterName, consumer, consumerParams, properties);
+ emit startFilterJob(m_clipref->info(), m_clipref->clipProducer(), filterName, filterParams, finalFilterName, consumer, consumerParams, properties, extraParams);
}
void EffectStackView2::slotResetEffect(int ix)
void slotSetCurrentEffect(int ix);
/** @brief Triggers a filter job on this clip. */
- void slotStartFilterJob(const QString&filterName, const QString&filterParams, const QString&finalFilterName, const QString&consumer, const QString&consumerParams, const QString&properties);
+ void slotStartFilterJob(const QString&filterName, const QString&filterParams, const QString&finalFilterName, const QString&consumer, const QString&consumerParams, const QString&properties,const QStringList &extraParams);
/** @brief Reset an effect to its default values. */
void slotResetEffect(int ix);
void updateClipRegion(ClipItem*, int, QString);
void displayMessage(const QString&, int);
void showComments(bool show);
- void startFilterJob(ItemInfo info, const QString &clipId, const QString &filterName, const QString &filterParams, const QString&finalFilterName, const QString &consumer, const QString &consumerParams, const QString &properties);
+ void startFilterJob(ItemInfo info, const QString &clipId, const QString &filterName, const QString &filterParams, const QString&finalFilterName, const QString &consumer, const QString &consumerParams, const QString &properties,const QStringList &extraParams);
void addEffect(ClipItem*,QDomElement);
};
QDomElement pa = namenode.item(i).toElement();
QString type = pa.attribute("type");
if (type == "filterjob") {
- emit startFilterJob(pa.attribute("filtertag"), pa.attribute("filterparams"), pa.attribute("finalfilter"), pa.attribute("consumer"), pa.attribute("consumerparams"), pa.attribute("wantedproperties"));
- kDebug()<<" - - -PROPS:\n"<<pa.attribute("filtertag")<<"-"<< pa.attribute("filterparams")<<"-"<< pa.attribute("consumer")<<"-"<< pa.attribute("consumerparams")<<"-"<< pa.attribute("wantedproperties");
+ QString filtertag = pa.attribute("filtertag");
+ if (filtertag.contains("%geometry")) {
+ // Replace with current geometry
+ if (m_geometryWidget) {
+ QString data = m_geometryWidget->getValue();
+ filtertag.replace("%geometry", data);
+ kDebug()<<"// Setting geometry: "<<data<<", RES: "<<filtertag;
+ }
+ }
+ QStringList extra;
+ extra = pa.attribute("extraparams").split(' ', QString::SkipEmptyParts);
+ emit startFilterJob(filtertag, pa.attribute("filterparams"), pa.attribute("finalfilter"), pa.attribute("consumer"), pa.attribute("consumerparams"), pa.attribute("wantedproperties"), extra);
+ kDebug()<<" - - -PROPS:\n"<<"filtertag"<<"-"<< pa.attribute("filterparams")<<"-"<< pa.attribute("consumer")<<"-"<< pa.attribute("consumerparams")<<"-"<< pa.attribute("wantedproperties");
break;
}
}
void seekTimeline(int);
void showComments(bool);
/** @brief Start an MLT filter job on this clip. */
- void startFilterJob(QString filterName, QString filterParams, QString finalFilterName, QString consumer, QString consumerParams, QString properties);
+ void startFilterJob(QString filterName, QString filterParams, QString finalFilterName, QString consumer, QString consumerParams, QString properties, QStringList extra);
};
m_paramWidget = new ParameterContainer(d, info, &m_metaInfo, m_baseWidget);
connect (m_paramWidget, SIGNAL(parameterChanged(const QDomElement, const QDomElement, int)), this, SIGNAL(parameterChanged(const QDomElement, const QDomElement, int)));
- connect(m_paramWidget, SIGNAL(startFilterJob(QString,QString,QString,QString,QString,QString)), this, SIGNAL(startFilterJob(QString,QString,QString,QString,QString,QString)));
+ connect(m_paramWidget, SIGNAL(startFilterJob(QString,QString,QString,QString,QString,QString,QStringList)), this, SIGNAL(startFilterJob(QString,QString,QString,QString,QString,QString,QStringList)));
connect (this, SIGNAL(syncEffectsPos(int)), m_paramWidget, SIGNAL(syncEffectsPos(int)));
connect (m_paramWidget, SIGNAL(checkMonitorPosition(int)), this, SIGNAL(checkMonitorPosition(int)));
void showComments(bool show);
void effectStateChanged(bool enabled);
/** @brief Start an MLT filter job on this clip. */
- void startFilterJob(const QString &filterName, const QString &filterParams, const QString &finalFilterName, const QString &consumer, const QString &consumerParams, const QString &properties);
+ void startFilterJob(const QString &filterName, const QString &filterParams, const QString &finalFilterName, const QString &consumer, const QString &consumerParams, const QString &properties, const QStringList&extraParams);
};
#endif
m_effectStack = new EffectStackView2(m_projectMonitor);
m_effectStackDock->setWidget(m_effectStack);
addDockWidget(Qt::TopDockWidgetArea, m_effectStackDock);
- connect(m_effectStack, SIGNAL(startFilterJob(ItemInfo, const QString&,const QString&,const QString&,const QString&,const QString&,const QString&,const QString&)), m_projectList, SLOT(slotStartFilterJob(ItemInfo, const QString&,const QString&,const QString&,const QString&,const QString&,const QString&,const QString&)));
+ connect(m_effectStack, SIGNAL(startFilterJob(ItemInfo, const QString&,const QString&,const QString&,const QString&,const QString&,const QString&,const QString&,const QStringList&)), m_projectList, SLOT(slotStartFilterJob(ItemInfo, const QString&,const QString&,const QString&,const QString&,const QString&,const QString&,const QString&,const QStringList&)));
m_transitionConfigDock = new QDockWidget(i18n("Transition"), this);
m_transitionConfigDock->setObjectName("transition");
// any type of clip but a title
ClipProperties *dia = new ClipProperties(clip, m_activeDocument->timecode(), m_activeDocument->fps(), this);
connect(dia, SIGNAL(addMarker(const QString &, CommentedTime)), m_activeTimeline->projectView(), SLOT(slotAddClipMarker(const QString &, CommentedTime)));
+ connect(dia, SIGNAL(deleteAnalysis(QString,QString)), m_activeTimeline->projectView(), SLOT(slotAddClipExtraData(QString,QString)));
connect(m_activeTimeline->projectView(), SIGNAL(updateClipMarkers(DocClipBase *)), dia, SLOT(slotFillMarkersList(DocClipBase *)));
+ connect(m_activeTimeline->projectView(), SIGNAL(updateClipExtraData(DocClipBase *)), dia, SLOT(slotUpdateAnalysisData(DocClipBase *)));
+ connect(m_projectList, SIGNAL(updateAnalysisData(DocClipBase *)), dia, SLOT(slotUpdateAnalysisData(DocClipBase *)));
connect(dia, SIGNAL(loadMarkers(const QString &)), m_activeTimeline->projectView(), SLOT(slotLoadClipMarkers(const QString &)));
connect(dia, SIGNAL(saveMarkers(const QString &)), m_activeTimeline->projectView(), SLOT(slotSaveClipMarkers(const QString &)));
connect(dia, SIGNAL(deleteProxy(const QString)), m_projectList, SLOT(slotDeleteProxy(const QString)));
}
}
-void ProjectList::slotStartFilterJob(ItemInfo info, const QString&id, const QString&filterName, const QString&filterParams, const QString&finalFilterName, const QString&consumer, const QString&consumerParams, const QString&properties)
+void ProjectList::slotStartFilterJob(ItemInfo info, const QString&id, const QString&filterName, const QString&filterParams, const QString&finalFilterName, const QString&consumer, const QString&consumerParams, const QString&properties, const QStringList &extraParams)
{
ProjectItem *item = getItemById(id);
if (!item) return;
QStringList jobParams;
jobParams << QString::number(info.cropStart.frames(m_fps)) << QString::number((info.cropStart + info.cropDuration).frames(m_fps));
jobParams << QString() << filterName << filterParams << consumer << consumerParams << properties << QString::number(info.startPos.frames(m_fps)) << QString::number(info.track) << finalFilterName;
- MeltJob *job = new MeltJob(item->clipType(), id, jobParams);
+ MeltJob *job = new MeltJob(item->clipType(), id, jobParams, extraParams);
if (job->isExclusive() && hasPendingJob(item, job->jobType)) {
delete job;
return;
// Keys
jobParams << "shot_change_list";
QStringList extraParams;
- extraParams << "projecttreefilter" << "project_profile";
+ extraParams << "projecttreefilter";
processClipJob(ids, QString(), false, jobParams, i18n("Auto split"), extraParams);
}
else {
QPointer<ClipStabilize> d = new ClipStabilize(destination, ids.count(), filterName);
if (d->exec() == QDialog::Accepted) {
- processClipJob(ids, d->destination(), d->autoAddClip(), d->params(), d->desc());
+ QStringList extraParams;
+ extraParams << "producer_profile";
+ processClipJob(ids, d->destination(), d->autoAddClip(), d->params(), d->desc(), extraParams);
}
delete d;
}
delete command;
else m_commandStack->push(command);
}
+ else if (filter.startsWith("autotrack_rectangle")) {
+ QString cuts = results.value("motion_vector_list");
+ ProjectItem *clip = getItemById(id);
+ if (clip) {
+ clip->referencedClip()->setAnalysisData(i18n("Motion vectors"), cuts);
+ emit updateAnalysisData(clip->referencedClip());
+ }
+ }
}
/** @brief Start transcoding selected clips. */
void slotTranscodeClipJob(const QString &condition, QString params, QString desc);
/** @brief Start an MLT process job. */
- void slotStartFilterJob(ItemInfo, const QString&,const QString&,const QString&,const QString&,const QString&,const QString&,const QString&);
+ void slotStartFilterJob(ItemInfo, const QString&,const QString&,const QString&,const QString&,const QString&,const QString&,const QString&,const QStringList&);
private:
/** @brief A Filter Job produced results, send them back to the clip. */
void gotFilterJobResults(const QString &id, int startPos, int track, const QString &filterName, stringMap params);
void pauseMonitor();
+ void updateAnalysisData(DocClipBase *);
};
#endif
return;
}
Mlt::Producer *prod ;
- if (m_extra.contains("project_profile")) {
- m_profile = new Mlt::Profile(KdenliveSettings::current_profile().toUtf8().constData());
- }
- else {
+ if (m_extra.contains("producer_profile")) {
m_profile = new Mlt::Profile;
m_profile->set_explicit(false);
}
+ else {
+ m_profile = new Mlt::Profile(KdenliveSettings::current_profile().toUtf8().constData());
+ }
if (out == -1) {
prod = new Mlt::Producer(*m_profile, m_url.toUtf8().constData());
}
prod = tmp->cut(in, out);
delete tmp;
}
- if (!m_extra.contains("project_profile")) {
+ if (m_extra.contains("prducer_profile")) {
m_profile->from_producer(*prod);
m_profile->set_explicit(true);
}
<string>Metadata</string>
</attribute>
<layout class="QGridLayout" name="gridLayout_9">
- <item row="0" column="0">
+ <item row="0" column="0" colspan="2">
<widget class="QTreeWidget" name="metadata_list">
<property name="alternatingRowColors">
<bool>true</bool>
</column>
</widget>
</item>
+ <item row="2" column="0">
+ <widget class="QFrame" name="analysis_box">
+ <property name="frameShape">
+ <enum>QFrame::NoFrame</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>QFrame::Plain</enum>
+ </property>
+ <layout class="QGridLayout" name="gridLayout_4">
+ <item row="0" column="0" colspan="4">
+ <widget class="QTreeWidget" name="analysis_list">
+ <property name="rootIsDecorated">
+ <bool>false</bool>
+ </property>
+ <property name="allColumnsShowFocus">
+ <bool>true</bool>
+ </property>
+ <attribute name="headerVisible">
+ <bool>false</bool>
+ </attribute>
+ <column>
+ <property name="text">
+ <string>1</string>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>2</string>
+ </property>
+ </column>
+ </widget>
+ </item>
+ <item row="1" column="0">
+ <widget class="QToolButton" name="analysis_delete">
+ <property name="text">
+ <string>...</string>
+ </property>
+ <property name="autoRaise">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="1">
+ <widget class="QToolButton" name="analysis_save">
+ <property name="text">
+ <string>...</string>
+ </property>
+ <property name="autoRaise">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="2">
+ <widget class="QToolButton" name="analysis_load">
+ <property name="text">
+ <string>...</string>
+ </property>
+ <property name="autoRaise">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="3">
+ <spacer name="horizontalSpacer_2">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>186</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ </layout>
+ </widget>
+ </item>
</layout>
</widget>
<widget class="QWidget" name="tab_advanced">