+
+void ProjectList::slotAddClipCut(const QString &id, int in, int out)
+{
+ ProjectItem *clip = getItemById(id);
+ if (clip == NULL) return;
+ if (clip->referencedClip()->hasCutZone(QPoint(in, out))) return;
+ AddClipCutCommand *command = new AddClipCutCommand(this, id, in, out, QString(), true, false);
+ m_commandStack->push(command);
+}
+
+void ProjectList::addClipCut(const QString &id, int in, int out, const QString desc, bool newItem)
+{
+ ProjectItem *clip = getItemById(id);
+ if (clip) {
+ DocClipBase *base = clip->referencedClip();
+ base->addCutZone(in, out);
+ m_listView->blockSignals(true);
+ SubProjectItem *sub = new SubProjectItem(clip, in, out, desc);
+ if (newItem && desc.isEmpty() && !m_listView->isColumnHidden(1)) {
+ if (!clip->isExpanded()) clip->setExpanded(true);
+ m_listView->scrollToItem(sub);
+ m_listView->editItem(sub, 1);
+ }
+ QPixmap p = clip->referencedClip()->thumbProducer()->extractImage(in, (int)(sub->sizeHint(0).height() * m_render->dar()), sub->sizeHint(0).height() - 2);
+ sub->setData(0, Qt::DecorationRole, p);
+ m_doc->cachePixmap(clip->getClipHash() + '#' + QString::number(in), p);
+ m_listView->blockSignals(false);
+ }
+ emit projectModified();
+}
+
+void ProjectList::removeClipCut(const QString &id, int in, int out)
+{
+ ProjectItem *clip = getItemById(id);
+ if (clip) {
+ DocClipBase *base = clip->referencedClip();
+ base->removeCutZone(in, out);
+ SubProjectItem *sub = getSubItem(clip, QPoint(in, out));
+ if (sub) {
+ m_listView->blockSignals(true);
+ delete sub;
+ m_listView->blockSignals(false);
+ }
+ }
+ emit projectModified();
+}
+
+SubProjectItem *ProjectList::getSubItem(ProjectItem *clip, QPoint zone)
+{
+ SubProjectItem *sub = NULL;
+ if (clip) {
+ for (int i = 0; i < clip->childCount(); i++) {
+ QTreeWidgetItem *it = clip->child(i);
+ if (it->type() == PROJECTSUBCLIPTYPE) {
+ sub = static_cast <SubProjectItem*>(it);
+ if (sub->zone() == zone) break;
+ else sub = NULL;
+ }
+ }
+ }
+ return sub;
+}
+
+void ProjectList::slotUpdateClipCut(QPoint p)
+{
+ if (!m_listView->currentItem() || m_listView->currentItem()->type() != PROJECTSUBCLIPTYPE) return;
+ SubProjectItem *sub = static_cast <SubProjectItem*>(m_listView->currentItem());
+ ProjectItem *item = static_cast <ProjectItem *>(sub->parent());
+ EditClipCutCommand *command = new EditClipCutCommand(this, item->clipId(), sub->zone(), p, sub->text(1), sub->text(1), true);
+ m_commandStack->push(command);
+}
+
+void ProjectList::doUpdateClipCut(const QString &id, const QPoint oldzone, const QPoint zone, const QString &comment)
+{
+ ProjectItem *clip = getItemById(id);
+ SubProjectItem *sub = getSubItem(clip, oldzone);
+ if (sub == NULL || clip == NULL) return;
+ DocClipBase *base = clip->referencedClip();
+ base->updateCutZone(oldzone.x(), oldzone.y(), zone.x(), zone.y(), comment);
+ m_listView->blockSignals(true);
+ sub->setZone(zone);
+ sub->setDescription(comment);
+ m_listView->blockSignals(false);
+ emit projectModified();
+}
+