From: <j-...@us...> - 2008-09-22 00:54:03
|
Revision: 2400 http://kdenlive.svn.sourceforge.net/kdenlive/?rev=2400&view=rev Author: j-b-m Date: 2008-09-22 00:53:51 +0000 (Mon, 22 Sep 2008) Log Message: ----------- Add option to move timeline cursor when editing a composite transition for better previewing Modified Paths: -------------- branches/KDE4/src/effectstackedit.cpp branches/KDE4/src/effectstackedit.h branches/KDE4/src/geometryval.cpp branches/KDE4/src/geometryval.h branches/KDE4/src/initeffects.cpp branches/KDE4/src/kdenlivesettings.kcfg branches/KDE4/src/mainwindow.cpp branches/KDE4/src/transitionsettings.cpp branches/KDE4/src/transitionsettings.h Modified: branches/KDE4/src/effectstackedit.cpp =================================================================== --- branches/KDE4/src/effectstackedit.cpp 2008-09-21 23:55:33 UTC (rev 2399) +++ branches/KDE4/src/effectstackedit.cpp 2008-09-22 00:53:51 UTC (rev 2400) @@ -36,7 +36,7 @@ QMap<QString, QImage> EffectStackEdit::iconCache; -EffectStackEdit::EffectStackEdit(QFrame* frame, QWidget *parent): QObject(parent) { +EffectStackEdit::EffectStackEdit(QFrame* frame, QWidget *parent): QObject(parent), m_in(0), m_out(0) { QScrollArea *area; QVBoxLayout *vbox1 = new QVBoxLayout(frame); QVBoxLayout *vbox2 = new QVBoxLayout(frame); @@ -77,10 +77,11 @@ m_profile = profile; } -void EffectStackEdit::transferParamDesc(const QDomElement& d, int , int) { +void EffectStackEdit::transferParamDesc(const QDomElement& d, int in, int out) { kDebug() << "in"; params = d; - + m_in = in; + m_out = out; clearAllItems(); if (params.isNull()) return; @@ -176,6 +177,7 @@ } else if (type == "geometry") { Geometryval *geo = new Geometryval(m_profile); connect(geo, SIGNAL(parameterChanged()), this, SLOT(collectAllParameters())); + connect(geo, SIGNAL(seekToPos(int)), this, SLOT(slotSeekToPos(int))); geo->setupParam(pa, minFrame, maxFrame); vbox->addWidget(geo); valueItems[paramName+"geometry"] = geo; @@ -259,6 +261,10 @@ } } +void EffectStackEdit::slotSeekToPos(int pos) { + emit seekTimeline(m_in + pos); +} + wipeInfo EffectStackEdit::getWipeInfo(QString value) { wipeInfo info; QString start = value.section(";", 0, 0); Modified: branches/KDE4/src/effectstackedit.h =================================================================== --- branches/KDE4/src/effectstackedit.h 2008-09-21 23:55:33 UTC (rev 2399) +++ branches/KDE4/src/effectstackedit.h 2008-09-22 00:53:51 UTC (rev 2400) @@ -56,14 +56,20 @@ wipeInfo getWipeInfo(QString value); QString getWipeString(wipeInfo info); MltVideoProfile m_profile; + int m_in; + int m_out; public slots: void transferParamDesc(const QDomElement&, int , int); void slotSliderMoved(int); void collectAllParameters(); +private slots: + void slotSeekToPos(int); + signals: void parameterChanged(const QDomElement&, const QDomElement&); + void seekTimeline(int); }; #endif Modified: branches/KDE4/src/geometryval.cpp =================================================================== --- branches/KDE4/src/geometryval.cpp 2008-09-21 23:55:33 UTC (rev 2399) +++ branches/KDE4/src/geometryval.cpp 2008-09-22 00:53:51 UTC (rev 2400) @@ -28,6 +28,7 @@ #include "graphicsscenerectmove.h" #include "geometryval.h" +#include "kdenlivesettings.h" Geometryval::Geometryval(const MltVideoProfile profile, QWidget* parent): QWidget(parent), m_profile(profile) { ui.setupUi(this); @@ -86,6 +87,11 @@ m_alignMenu->addAction(i18n("Top"), this, SLOT(slotAlignTop())); m_alignMenu->addAction(i18n("Bottom"), this, SLOT(slotAlignBottom())); + + m_syncAction = configMenu->addAction(i18n("Sync timeline cursor"), this, SLOT(slotSyncCursor())); + m_syncAction->setCheckable(true); + m_syncAction->setChecked(KdenliveSettings::transitionfollowcursor()); + //scene->setSceneRect(0, 0, profile.width * 2, profile.height * 2); //view->fitInView(m_frameBorder, Qt::KeepAspectRatio); const double sc = 100.0 / profile.height * 0.8; @@ -233,7 +239,12 @@ emit parameterChanged(); } +void Geometryval::slotSyncCursor() { + KdenliveSettings::setTransitionfollowcursor(m_syncAction->isChecked()); +} + void Geometryval::slotPositionChanged(int pos) { + if (KdenliveSettings::transitionfollowcursor()) emit seekToPos(pos); ui.spinPos->setValue(pos); m_helper->setValue(pos); Mlt::GeometryItem item; Modified: branches/KDE4/src/geometryval.h =================================================================== --- branches/KDE4/src/geometryval.h 2008-09-21 23:55:33 UTC (rev 2399) +++ branches/KDE4/src/geometryval.h 2008-09-22 00:53:51 UTC (rev 2400) @@ -53,6 +53,7 @@ QGraphicsPathItem *m_path; QMenu *m_scaleMenu; QMenu *m_alignMenu; + QAction *m_syncAction; void updateTransitionPath(); @@ -77,9 +78,11 @@ void slotAlignCenter(); void slotAlignHCenter(); void slotAlignVCenter(); + void slotSyncCursor(); signals: void parameterChanged(); + void seekToPos(int); }; #endif Modified: branches/KDE4/src/initeffects.cpp =================================================================== --- branches/KDE4/src/initeffects.cpp 2008-09-21 23:55:33 UTC (rev 2399) +++ branches/KDE4/src/initeffects.cpp 2008-09-22 00:53:51 UTC (rev 2400) @@ -546,7 +546,7 @@ //thumbnailer.prepareThumbnailsCall(imagelist); } else if (name == "composite") { - paramList.append(quickParameterFill(ret, "Geometry", "geometry", "geometry", "0%,0%:100%x100%:100;-1=0%,0%:100%x100%:100", "-500;-500;-500;-500;0", "500;500;500;500;100")); + paramList.append(quickParameterFill(ret, "Geometry", "geometry", "geometry", "0%,0%:100%x100%:100", "-500;-500;-500;-500;0", "500;500;500;500;100")); paramList.append(quickParameterFill(ret, "Distort", "distort", "bool", "1", "1", "1")); tname.appendChild(ret.createTextNode("Composite")); QDomDocument ret1; Modified: branches/KDE4/src/kdenlivesettings.kcfg =================================================================== --- branches/KDE4/src/kdenlivesettings.kcfg 2008-09-21 23:55:33 UTC (rev 2399) +++ branches/KDE4/src/kdenlivesettings.kcfg 2008-09-22 00:53:51 UTC (rev 2400) @@ -314,5 +314,10 @@ <default>true</default> </entry> + <entry name="transitionfollowcursor" type="Bool"> + <label>When editing a composite transition, move timeline cursor for better preview.</label> + <default>true</default> + </entry> + </group> </kcfg> \ No newline at end of file Modified: branches/KDE4/src/mainwindow.cpp =================================================================== --- branches/KDE4/src/mainwindow.cpp 2008-09-21 23:55:33 UTC (rev 2399) +++ branches/KDE4/src/mainwindow.cpp 2008-09-22 00:53:51 UTC (rev 2400) @@ -1114,6 +1114,7 @@ disconnect(effectStack, SIGNAL(refreshEffectStack(ClipItem*)), m_activeTimeline->projectView(), SLOT(slotRefreshEffects(ClipItem*))); disconnect(effectStack, SIGNAL(reloadEffects()), this, SLOT(slotReloadEffects())); disconnect(transitionConfig, SIGNAL(transitionUpdated(Transition *, QDomElement)), trackView->projectView() , SLOT(slotTransitionUpdated(Transition *, QDomElement))); + disconnect(transitionConfig, SIGNAL(seekTimeline(int)), trackView->projectView() , SLOT(setCursorPos(int))); disconnect(m_activeTimeline->projectView(), SIGNAL(activateDocumentMonitor()), m_projectMonitor, SLOT(activateMonitor())); effectStack->clear(); } @@ -1163,6 +1164,7 @@ connect(effectStack, SIGNAL(changeEffectPosition(ClipItem*, int, int)), trackView->projectView(), SLOT(slotChangeEffectPosition(ClipItem*, int, int))); connect(effectStack, SIGNAL(refreshEffectStack(ClipItem*)), trackView->projectView(), SLOT(slotRefreshEffects(ClipItem*))); connect(transitionConfig, SIGNAL(transitionUpdated(Transition *, QDomElement)), trackView->projectView() , SLOT(slotTransitionUpdated(Transition *, QDomElement))); + connect(transitionConfig, SIGNAL(seekTimeline(int)), trackView->projectView() , SLOT(setCursorPos(int))); connect(effectStack, SIGNAL(reloadEffects()), this, SLOT(slotReloadEffects())); connect(trackView->projectView(), SIGNAL(activateDocumentMonitor()), m_projectMonitor, SLOT(activateMonitor())); Modified: branches/KDE4/src/transitionsettings.cpp =================================================================== --- branches/KDE4/src/transitionsettings.cpp 2008-09-21 23:55:33 UTC (rev 2399) +++ branches/KDE4/src/transitionsettings.cpp 2008-09-22 00:53:51 UTC (rev 2400) @@ -22,11 +22,13 @@ #include "transition.h" #include "effectslist.h" #include "effectstackedit.h" +#include "kdenlivesettings.h" #include "mainwindow.h" TransitionSettings::TransitionSettings(QWidget* parent): QWidget(parent) { ui.setupUi(this); effectEdit = new EffectStackEdit(ui.frame, this); + connect(effectEdit, SIGNAL(seekTimeline(int)), this, SIGNAL(seekTimeline(int))); setEnabled(false); ui.listWidget->addItems(MainWindow::transitions.effectNames()); kDebug() << MainWindow::transitions.effectNames().size(); @@ -48,10 +50,10 @@ if (reinit) { QDomElement newTransition = MainWindow::transitions.getEffectByName(ui.listWidget->currentItem()->text()); slotUpdateEffectParams(e, newTransition); - emit transferParamDesc(newTransition, 0, 0); + emit transferParamDesc(newTransition, m_usedTransition->startPos().frames(KdenliveSettings::project_fps()), m_usedTransition->endPos().frames(KdenliveSettings::project_fps())); } else { //slotUpdateEffectParams(e, e); - emit transferParamDesc(e, 0, 0); + emit transferParamDesc(e, m_usedTransition->startPos().frames(KdenliveSettings::project_fps()), m_usedTransition->endPos().frames(KdenliveSettings::project_fps())); } } Modified: branches/KDE4/src/transitionsettings.h =================================================================== --- branches/KDE4/src/transitionsettings.h 2008-09-21 23:55:33 UTC (rev 2399) +++ branches/KDE4/src/transitionsettings.h 2008-09-22 00:53:51 UTC (rev 2400) @@ -46,6 +46,7 @@ signals: void transitionUpdated(Transition *, QDomElement); void transferParamDesc(const QDomElement&, int , int); + void seekTimeline(int); }; #endif This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <j-...@us...> - 2008-09-22 12:23:18
|
Revision: 2401 http://kdenlive.svn.sourceforge.net/kdenlive/?rev=2401&view=rev Author: j-b-m Date: 2008-09-22 12:23:11 +0000 (Mon, 22 Sep 2008) Log Message: ----------- Small fixes for composite transition and more fixes for title clips. Modified Paths: -------------- branches/KDE4/src/CMakeLists.txt branches/KDE4/src/addclipcommand.h branches/KDE4/src/customtrackview.cpp branches/KDE4/src/docclipbase.cpp branches/KDE4/src/geometryval.cpp branches/KDE4/src/geometryval.h branches/KDE4/src/graphicsscenerectmove.cpp branches/KDE4/src/kdenlivedoc.cpp branches/KDE4/src/kdenlivedoc.h branches/KDE4/src/keyframehelper.cpp branches/KDE4/src/mainwindow.cpp branches/KDE4/src/projectitem.cpp branches/KDE4/src/projectlist.cpp branches/KDE4/src/titlewidget.cpp branches/KDE4/src/transitionsettings.cpp branches/KDE4/src/transitionsettings.h branches/KDE4/src/widgets/transitionsettings_ui.ui branches/KDE4/src/widgets/wipeval_ui.ui Added Paths: ----------- branches/KDE4/src/editclipcommand.cpp branches/KDE4/src/editclipcommand.h Modified: branches/KDE4/src/CMakeLists.txt =================================================================== --- branches/KDE4/src/CMakeLists.txt 2008-09-22 00:53:51 UTC (rev 2400) +++ branches/KDE4/src/CMakeLists.txt 2008-09-22 12:23:11 UTC (rev 2401) @@ -132,6 +132,7 @@ customtrackscene.cpp abstractgroupitem.cpp keyframehelper.cpp + editclipcommand.cpp ) kde4_add_kcfg_files(kdenlive_SRCS GENERATE_MOC kdenlivesettings.kcfgc ) Modified: branches/KDE4/src/addclipcommand.h =================================================================== --- branches/KDE4/src/addclipcommand.h 2008-09-22 00:53:51 UTC (rev 2400) +++ branches/KDE4/src/addclipcommand.h 2008-09-22 12:23:11 UTC (rev 2401) @@ -29,7 +29,7 @@ class AddClipCommand : public QUndoCommand { public: - AddClipCommand(KdenliveDoc *list, const QDomElement &xml, const QString &id, bool doIt, QUndoCommand * parent = 0); + AddClipCommand(KdenliveDoc *doc, const QDomElement &xml, const QString &id, bool doIt, QUndoCommand * parent = 0); virtual void undo(); virtual void redo(); Modified: branches/KDE4/src/customtrackview.cpp =================================================================== --- branches/KDE4/src/customtrackview.cpp 2008-09-22 00:53:51 UTC (rev 2400) +++ branches/KDE4/src/customtrackview.cpp 2008-09-22 12:23:11 UTC (rev 2401) @@ -1259,7 +1259,7 @@ } else if (m_dragItem->type() == TRANSITIONWIDGET) { MoveTransitionCommand *command = new MoveTransitionCommand(this, m_dragItemInfo, info, false); m_commandStack->push(command); - Transition *transition = (Transition *) m_dragItem; + Transition *transition = static_cast <Transition *>(m_dragItem); m_document->renderer()->mltMoveTransition(transition->transitionTag(), (int)(m_scene->m_tracksList.count() - m_dragItemInfo.track), (int)(m_scene->m_tracksList.count() - m_dragItemInfo.track), 0, m_dragItemInfo.startPos, m_dragItemInfo.endPos, info.startPos, info.endPos); } @@ -1280,8 +1280,8 @@ } else if (m_dragItem->type() == TRANSITIONWIDGET) { MoveTransitionCommand *command = new MoveTransitionCommand(this, m_dragItemInfo, info, false); m_commandStack->push(command); - Transition *transition = (Transition *) m_dragItem; -// m_document->renderer()->mltMoveTransition(transition->transitionTag(), (int)(m_scene->m_tracksList.count() - m_dragItemInfo.track), (int)(m_scene->m_tracksList.count() - m_dragItemInfo.track), 0, m_dragItemInfo.startPos, m_dragItemInfo.endPos, info.startPos, info.endPos); + Transition *transition = static_cast <Transition *>(m_dragItem); + m_document->renderer()->mltMoveTransition(transition->transitionTag(), (int)(m_scene->m_tracksList.count() - m_dragItemInfo.track), (int)(m_scene->m_tracksList.count() - m_dragItemInfo.track), 0, m_dragItemInfo.startPos, m_dragItemInfo.endPos, info.startPos, info.endPos); } //m_document->renderer()->doRefresh(); } else if (m_operationMode == FADEIN) { @@ -1347,7 +1347,7 @@ updateEffect(m_scene->m_tracksList.count() - item->track(), item->startPos(), item->selectedEffect(), item->selectedEffectIndex()); } - emit transitionItemSelected((m_dragItem && m_dragItem->type() == TRANSITIONWIDGET) ? (Transition*) m_dragItem : NULL); + emit transitionItemSelected((m_dragItem && m_dragItem->type() == TRANSITIONWIDGET) ? static_cast <Transition *>(m_dragItem) : NULL); m_document->setModified(true); m_operationMode = NONE; } Modified: branches/KDE4/src/docclipbase.cpp =================================================================== --- branches/KDE4/src/docclipbase.cpp 2008-09-22 00:53:51 UTC (rev 2400) +++ branches/KDE4/src/docclipbase.cpp 2008-09-22 12:23:11 UTC (rev 2401) @@ -43,7 +43,8 @@ } if (m_name.isEmpty()) m_name = url.fileName(); - if (!url.isEmpty() && QFile::exists(url.path())) { + //if (!url.isEmpty() && QFile::exists(url.path())) + { m_thumbProd = new KThumb(clipManager, url); if (m_clipType == AV || m_clipType == AUDIO) slotCreateAudioTimer(); } @@ -450,6 +451,13 @@ else if (i.key() == "out") setDuration(GenTime(i.value().toInt(), KdenliveSettings::project_fps())); else if (m_clipType == SLIDESHOW && keys.contains(i.key())) refreshProducer = true; else if (i.key() == "transparency") m_clipProducer->set("transparency", i.value().toInt()); + else if (i.key() == "colour") { + char *tmp = (char *) qstrdup(i.value().toUtf8().data()); + m_clipProducer->set("colour", tmp); + delete[] tmp; + } else if (i.key() == "xmldata") { + m_clipProducer->set("force_reload", 1); + } } if (refreshProducer) slotRefreshProducer(); } @@ -459,6 +467,13 @@ if (key == "resource") m_thumbProd->updateClipUrl(KUrl(value)); else if (key == "out") setDuration(GenTime(value.toInt(), KdenliveSettings::project_fps())); else if (key == "transparency") m_clipProducer->set("transparency", value.toInt()); + else if (key == "colour") { + char *tmp = (char *) qstrdup(value.toUtf8().data()); + m_clipProducer->set("colour", tmp); + delete[] tmp; + } else if (key == "xmldata") { + m_clipProducer->set("force_reload", 1); + } } QMap <QString, QString> DocClipBase::properties() const { Added: branches/KDE4/src/editclipcommand.cpp =================================================================== --- branches/KDE4/src/editclipcommand.cpp (rev 0) +++ branches/KDE4/src/editclipcommand.cpp 2008-09-22 12:23:11 UTC (rev 2401) @@ -0,0 +1,41 @@ +/*************************************************************************** + * Copyright (C) 2008 by Jean-Baptiste Mardelle (jb...@kd...) * + * * + * 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. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * + ***************************************************************************/ + +#include <KLocale> + +#include "editclipcommand.h" +#include "projectlist.h" + +EditClipCommand::EditClipCommand(ProjectList *list, const QString &id, QMap <QString, QString> oldparams, QMap <QString, QString> newparams, bool doIt, QUndoCommand * parent) : QUndoCommand(parent), m_list(list), m_id(id), m_oldparams(oldparams), m_newparams(newparams), m_doIt(doIt) { + setText(i18n("Edit clip")); +} + + +// virtual +void EditClipCommand::undo() { + kDebug() << "---- undoing action"; + m_list->slotUpdateClipProperties(m_id, m_oldparams); +} +// virtual +void EditClipCommand::redo() { + kDebug() << "---- redoing action"; + if (m_doIt) m_list->slotUpdateClipProperties(m_id, m_newparams); + m_doIt = true; +} + Added: branches/KDE4/src/editclipcommand.h =================================================================== --- branches/KDE4/src/editclipcommand.h (rev 0) +++ branches/KDE4/src/editclipcommand.h 2008-09-22 12:23:11 UTC (rev 2401) @@ -0,0 +1,46 @@ +/*************************************************************************** + * Copyright (C) 2008 by Jean-Baptiste Mardelle (jb...@kd...) * + * * + * 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. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * + ***************************************************************************/ + + +#ifndef EDITCLIPCOMMAND_H +#define EDITCLIPCOMMAND_H + +#include <QUndoCommand> +#include <KDebug> +#include <QDomElement> + +class ProjectList; + +class EditClipCommand : public QUndoCommand { +public: + EditClipCommand(ProjectList *list, const QString &id, QMap <QString, QString> oldparams, QMap <QString, QString> newparams, bool doIt, QUndoCommand * parent = 0); + + virtual void undo(); + virtual void redo(); + +private: + ProjectList *m_list; + QMap <QString, QString> m_oldparams; + QMap <QString, QString> m_newparams; + QString m_id; + bool m_doIt; +}; + +#endif + Modified: branches/KDE4/src/geometryval.cpp =================================================================== --- branches/KDE4/src/geometryval.cpp 2008-09-22 00:53:51 UTC (rev 2400) +++ branches/KDE4/src/geometryval.cpp 2008-09-22 12:23:11 UTC (rev 2401) @@ -30,7 +30,7 @@ #include "geometryval.h" #include "kdenlivesettings.h" -Geometryval::Geometryval(const MltVideoProfile profile, QWidget* parent): QWidget(parent), m_profile(profile) { +Geometryval::Geometryval(const MltVideoProfile profile, QWidget* parent): QWidget(parent), m_profile(profile), m_geom(NULL), m_path(NULL), paramRect(NULL) { ui.setupUi(this); QVBoxLayout* vbox = new QVBoxLayout(ui.widget); QGraphicsView *view = new QGraphicsView(this); @@ -96,13 +96,14 @@ //view->fitInView(m_frameBorder, Qt::KeepAspectRatio); const double sc = 100.0 / profile.height * 0.8; QRectF srect = view->sceneRect(); - view->setSceneRect(srect.x(), -srect.height() / 2, srect.width(), srect.height() * 2); + view->setSceneRect(srect.x(), -srect.height() / 3, srect.width(), srect.height() + srect.height() / 3 * 2); scene->setZoom(sc); view->centerOn(m_frameBorder); connect(ui.buttonNext , SIGNAL(clicked()) , this , SLOT(slotNextFrame())); connect(ui.buttonPrevious , SIGNAL(clicked()) , this , SLOT(slotPreviousFrame())); connect(ui.buttonDelete , SIGNAL(clicked()) , this , SLOT(slotDeleteFrame())); connect(ui.buttonAdd , SIGNAL(clicked()) , this , SLOT(slotAddFrame())); + connect(scene, SIGNAL(actionFinished()), this, SLOT(slotUpdateTransitionProperties())); } void Geometryval::slotAlignCenter() { @@ -243,8 +244,8 @@ KdenliveSettings::setTransitionfollowcursor(m_syncAction->isChecked()); } -void Geometryval::slotPositionChanged(int pos) { - if (KdenliveSettings::transitionfollowcursor()) emit seekToPos(pos); +void Geometryval::slotPositionChanged(int pos, bool seek) { + if (seek && KdenliveSettings::transitionfollowcursor()) emit seekToPos(pos); ui.spinPos->setValue(pos); m_helper->setValue(pos); Mlt::GeometryItem item; @@ -330,31 +331,34 @@ param = par; QString val = par.attribute("value"); char *tmp = (char *) qstrdup(val.toUtf8().data()); - m_geom = new Mlt::Geometry(tmp, maxFrame - minFrame, m_profile.width, m_profile.height); + if (m_geom) m_geom->parse(tmp, maxFrame - minFrame, m_profile.width, m_profile.height); + else m_geom = new Mlt::Geometry(tmp, maxFrame - minFrame, m_profile.width, m_profile.height); delete[] tmp; - kDebug() << " / / UPDATING TRANSITION VALUE: " << m_geom->serialise(); + //kDebug() << " / / UPDATING TRANSITION VALUE: " << m_geom->serialise(); //read param her and set rect m_helper->setKeyGeometry(m_geom, maxFrame - minFrame - 1); - QDomDocument doc; + m_helper->update(); + /*QDomDocument doc; doc.appendChild(doc.importNode(par, true)); - kDebug() << "IMPORTED TRANS: " << doc.toString(); + kDebug() << "IMPORTED TRANS: " << doc.toString();*/ ui.spinPos->setMaximum(maxFrame - minFrame - 1); Mlt::GeometryItem item; - m_path = new QGraphicsPathItem(); - m_path->setPen(QPen(Qt::red)); + if (m_path == NULL) { + m_path = new QGraphicsPathItem(); + m_path->setPen(QPen(Qt::red)); + scene->addItem(m_path); + } updateTransitionPath(); - connect(scene, SIGNAL(actionFinished()), this, SLOT(slotUpdateTransitionProperties())); - m_geom->fetch(&item, 0); + if (paramRect) delete paramRect; paramRect = new QGraphicsRectItem(QRectF(0, 0, item.w(), item.h())); paramRect->setPos(item.x(), item.y()); paramRect->setZValue(0); paramRect->setPen(QPen(QBrush(QColor(255, 0, 0, 255)), 1.0)); scene->addItem(paramRect); - scene->addItem(m_path); - slotPositionChanged(0); + slotPositionChanged(0, false); connect(ui.spinPos, SIGNAL(valueChanged(int)), this , SLOT(slotPositionChanged(int))); connect(ui.spinTransp, SIGNAL(valueChanged(int)), this , SLOT(slotTransparencyChanged(int))); } Modified: branches/KDE4/src/geometryval.h =================================================================== --- branches/KDE4/src/geometryval.h 2008-09-22 00:53:51 UTC (rev 2400) +++ branches/KDE4/src/geometryval.h 2008-09-22 12:23:11 UTC (rev 2401) @@ -63,7 +63,7 @@ private slots: void slotNextFrame(); void slotPreviousFrame(); - void slotPositionChanged(int pos); + void slotPositionChanged(int pos, bool seek = true); void slotDeleteFrame(); void slotAddFrame(); void slotUpdateTransitionProperties(); Modified: branches/KDE4/src/graphicsscenerectmove.cpp =================================================================== --- branches/KDE4/src/graphicsscenerectmove.cpp 2008-09-22 00:53:51 UTC (rev 2400) +++ branches/KDE4/src/graphicsscenerectmove.cpp 2008-09-22 12:23:11 UTC (rev 2401) @@ -14,7 +14,7 @@ GraphicsSceneRectMove::GraphicsSceneRectMove(QObject *parent): QGraphicsScene(parent), m_selectedItem(NULL), resizeMode(NoResize), m_tool(TITLE_RECTANGLE) { //grabMouse(); zoom = 1.0; - setBackgroundBrush(QBrush(Qt::black)); + setBackgroundBrush(QBrush(Qt::transparent)); } void GraphicsSceneRectMove::setSelectedItem(QGraphicsItem *item) { @@ -83,6 +83,7 @@ default: QGraphicsScene::keyPressEvent(keyEvent); } + emit actionFinished(); } //virtual Modified: branches/KDE4/src/kdenlivedoc.cpp =================================================================== --- branches/KDE4/src/kdenlivedoc.cpp 2008-09-22 00:53:51 UTC (rev 2400) +++ branches/KDE4/src/kdenlivedoc.cpp 2008-09-22 12:23:11 UTC (rev 2401) @@ -721,12 +721,6 @@ setModified(true); } -void KdenliveDoc::slotAddTextClipFile(const QString path, const QString xml, const QString group, const QString &groupId) { - kDebug() << "///////// DOCUM, ADD TXT CLP: " << path; - m_clipManager->slotAddTextClipFile(path, xml, group, groupId); - setModified(true); -} - void KdenliveDoc::slotAddFolder(const QString folderName) { AddFolderCommand *command = new AddFolderCommand(this, folderName, QString::number(m_clipManager->getFreeClipId()), true); commandStack()->push(command); @@ -778,27 +772,12 @@ QPixmap pix = dia_ui->renderedPixmap(); pix.save(path + ".png"); //dia_ui->saveTitle(path + ".kdenlivetitle"); - slotAddTextClipFile(path, dia_ui->xml().toString(), QString(), QString()); + m_clipManager->slotAddTextClipFile(path, dia_ui->xml().toString(), QString(), QString()); + setModified(true); } delete dia_ui; } -void KdenliveDoc::editTextClip(QString path, const QString &id) { - DocClipBase *clip = m_clipManager->getClipById(id); - if (!clip) return; - TitleWidget *dia_ui = new TitleWidget(KUrl()/*path + ".kdenlivetitle")*/, path, m_render, kapp->activeWindow()); - QDomDocument doc; - doc.setContent(clip->getProperty("xmldata")); - dia_ui->setXml(doc); - if (dia_ui->exec() == QDialog::Accepted) { - QPixmap pix = dia_ui->renderedPixmap(); - pix.save(path + ".png"); - //dia_ui->saveTitle(path + ".kdenlivetitle"); - //slotAddClipFile(KUrl("/tmp/kdenlivetitle.png"), QString(), -1); - emit refreshClipThumbnail(id); - } - delete dia_ui; -} #include "kdenlivedoc.moc" Modified: branches/KDE4/src/kdenlivedoc.h =================================================================== --- branches/KDE4/src/kdenlivedoc.h 2008-09-22 00:53:51 UTC (rev 2400) +++ branches/KDE4/src/kdenlivedoc.h 2008-09-22 12:23:11 UTC (rev 2401) @@ -70,8 +70,6 @@ void deleteFolder(const QString foldername, const QString &clipId); void slotAddClipFile(const KUrl url, const QString group, const QString &groupId = QString()); void slotAddClipList(const KUrl::List urls, const QString group, const QString &groupId = QString()); - void slotAddTextClipFile(const QString path, const QString xml, const QString group, const QString &groupId = QString()); - void editTextClip(QString path, const QString &id); void slotAddFolder(const QString folderName); void slotDeleteFolder(const QString folderName, const QString &id); void slotEditFolder(const QString folderName, const QString oldfolderName, const QString &clipId); @@ -150,7 +148,6 @@ void progressInfo(const QString &, int); /** emited when the document state has been modified (= needs saving or not) */ void docModified(bool); - void refreshClipThumbnail(const QString &); void selectLastAddedClip(const QString &); }; Modified: branches/KDE4/src/keyframehelper.cpp =================================================================== --- branches/KDE4/src/keyframehelper.cpp 2008-09-22 00:53:51 UTC (rev 2400) +++ branches/KDE4/src/keyframehelper.cpp 2008-09-22 12:23:11 UTC (rev 2401) @@ -72,21 +72,24 @@ m_scale = (double) width() / m_length; if (m_geom != NULL) { int pos = 0; - p.setBrush(QColor(255, 20, 20)); + p.setPen(QColor(255, 20, 20)); Mlt::GeometryItem item; while (true) { if (m_geom->next_key(&item, pos) == 1) break; pos = item.frame(); int scaledPos = pos * m_scale; - p.drawLine(scaledPos, clipRect.y() , scaledPos, clipRect.bottom()); + p.drawLine(scaledPos, 0, scaledPos, 10); //p.fillRect(QRect(scaledPos - 1, 0, 2, 15), QBrush(QColor(255, 20, 20))); pos++; } } + p.setPen(palette().dark().color()); + p.drawLine(clipRect.x(), 5, clipRect.right(), 5); + // draw pointer QPolygon pa(3); const int cursor = m_position * m_scale; - pa.setPoints(3, cursor - 5, 14, cursor + 5, 14, cursor/*+0*/, 9); + pa.setPoints(3, cursor - 5, 11, cursor + 5, 11, cursor/*+0*/, 6); p.setBrush(palette().dark().color()); p.drawPolygon(pa); Modified: branches/KDE4/src/mainwindow.cpp =================================================================== --- branches/KDE4/src/mainwindow.cpp 2008-09-22 00:53:51 UTC (rev 2400) +++ branches/KDE4/src/mainwindow.cpp 2008-09-22 12:23:11 UTC (rev 2401) @@ -76,6 +76,8 @@ #include "jogshuttle.h" #include "clipproperties.h" #include "wizard.h" +#include "editclipcommand.h" +#include "titlewidget.h" static const int ID_STATUS_MSG = 1; static const int ID_EDITMODE_MSG = 2; @@ -1095,7 +1097,6 @@ disconnect(m_activeDocument, SIGNAL(addProjectFolder(const QString, const QString &, bool, bool)), m_projectList, SLOT(slotAddFolder(const QString, const QString &, bool, bool))); disconnect(m_activeDocument, SIGNAL(signalDeleteProjectClip(const QString &)), m_projectList, SLOT(slotDeleteClip(const QString &))); disconnect(m_activeDocument, SIGNAL(updateClipDisplay(const QString &)), m_projectList, SLOT(slotUpdateClip(const QString &))); - disconnect(m_activeDocument, SIGNAL(refreshClipThumbnail(const QString &)), m_projectList, SLOT(slotRefreshClipThumbnail(const QString &))); disconnect(m_activeDocument, SIGNAL(selectLastAddedClip(const QString &)), m_projectList, SLOT(slotSelectClip(const QString &))); disconnect(m_activeDocument, SIGNAL(deleteTimelineClip(const QString &)), m_activeTimeline, SLOT(slotDeleteClip(const QString &))); disconnect(m_activeTimeline, SIGNAL(clipItemSelected(ClipItem*)), effectStack, SLOT(slotClipItemSelected(ClipItem*))); @@ -1137,7 +1138,6 @@ connect(doc, SIGNAL(addProjectFolder(const QString, const QString &, bool, bool)), m_projectList, SLOT(slotAddFolder(const QString, const QString &, bool, bool))); connect(doc, SIGNAL(signalDeleteProjectClip(const QString &)), m_projectList, SLOT(slotDeleteClip(const QString &))); connect(doc, SIGNAL(updateClipDisplay(const QString &)), m_projectList, SLOT(slotUpdateClip(const QString &))); - connect(doc, SIGNAL(refreshClipThumbnail(const QString &)), m_projectList, SLOT(slotRefreshClipThumbnail(const QString &))); connect(doc, SIGNAL(selectLastAddedClip(const QString &)), m_projectList, SLOT(slotSelectClip(const QString &))); connect(doc, SIGNAL(deleteTimelineClip(const QString &)), trackView, SLOT(slotDeleteClip(const QString &))); @@ -1370,13 +1370,35 @@ void MainWindow::slotShowClipProperties(DocClipBase *clip) { if (clip->clipType() == TEXT) { - m_activeDocument->editTextClip(clip->getProperty("xml"), clip->getId()); + QString path = clip->getProperty("xml"); + TitleWidget *dia_ui = new TitleWidget(KUrl()/*path + ".kdenlivetitle")*/, path, m_projectMonitor->render, this); + QDomDocument doc; + doc.setContent(clip->getProperty("xmldata")); + dia_ui->setXml(doc); + if (dia_ui->exec() == QDialog::Accepted) { + kDebug() << "// UPDATUING CLIP TITLE: " << path; + QPixmap pix = dia_ui->renderedPixmap(); + pix.save(path + ".png"); + //slotAddClipFile(KUrl("/tmp/kdenlivetitle.png"), QString(), -1); + //m_clipManager->slotEditTextClipFile(id, dia_ui->xml().toString()); + QMap <QString, QString> newprops; + newprops.insert("xmldata", dia_ui->xml().toString()); + EditClipCommand *command = new EditClipCommand(m_projectList, clip->getId(), clip->properties(), newprops, true); + m_activeDocument->commandStack()->push(command); + //setModified(true); + } + delete dia_ui; + + //m_activeDocument->editTextClip(clip->getProperty("xml"), clip->getId()); return; } ClipProperties dia(clip, m_activeDocument->timecode(), m_activeDocument->fps(), this); connect(&dia, SIGNAL(addMarker(const QString &, GenTime, QString)), m_activeTimeline->projectView(), SLOT(slotAddClipMarker(const QString &, GenTime, QString))); if (dia.exec() == QDialog::Accepted) { - m_projectList->slotUpdateClipProperties(dia.clipId(), dia.properties()); + EditClipCommand *command = new EditClipCommand(m_projectList, dia.clipId(), clip->properties(), dia.properties(), true); + m_activeDocument->commandStack()->push(command); + + //m_projectList->slotUpdateClipProperties(dia.clipId(), dia.properties()); if (dia.needsTimelineRefresh()) { // update clip occurences in timeline m_activeTimeline->projectView()->slotUpdateClip(dia.clipId()); Modified: branches/KDE4/src/projectitem.cpp =================================================================== --- branches/KDE4/src/projectitem.cpp 2008-09-22 00:53:51 UTC (rev 2400) +++ branches/KDE4/src/projectitem.cpp 2008-09-22 12:23:11 UTC (rev 2401) @@ -208,7 +208,7 @@ m_clip->setClipType(m_clipType); } slotSetToolTip(); - if (KdenliveSettings::audiothumbnails()) m_clip->slotRequestAudioThumbs(); + if ((m_clipType == AV || m_clipType == AUDIO) && KdenliveSettings::audiothumbnails()) m_clip->slotRequestAudioThumbs(); m_clip->setProperties(attributes); /* Modified: branches/KDE4/src/projectlist.cpp =================================================================== --- branches/KDE4/src/projectlist.cpp 2008-09-22 00:53:51 UTC (rev 2400) +++ branches/KDE4/src/projectlist.cpp 2008-09-22 12:23:11 UTC (rev 2401) @@ -151,7 +151,7 @@ ProjectItem *item = getItemById(id); if (item) { slotUpdateClipProperties(item, properties); - if (properties.contains("colour") || properties.contains("resource")) slotRefreshClipThumbnail(item); + if (properties.contains("colour") || properties.contains("resource") || properties.contains("xmldata")) slotRefreshClipThumbnail(item); if (properties.contains("out")) item->changeDuration(properties.value("out").toInt()); } } @@ -459,6 +459,7 @@ void ProjectList::slotRefreshClipThumbnail(ProjectItem *item) { if (item) { + kDebug() << " / / / /PROJECT LIST, REFRESH THMB"; int height = 50; int width = (int)(height * m_render->dar()); QPixmap pix = item->referencedClip()->thumbProducer()->extractImage(item->referencedClip()->getClipThumbFrame(), width, height); Modified: branches/KDE4/src/titlewidget.cpp =================================================================== --- branches/KDE4/src/titlewidget.cpp 2008-09-22 00:53:51 UTC (rev 2400) +++ branches/KDE4/src/titlewidget.cpp 2008-09-22 12:23:11 UTC (rev 2401) @@ -137,9 +137,9 @@ m_titledocument.setScene(m_scene); // a gradient background - QRadialGradient *gradient = new QRadialGradient(0, 0, 10); + /*QRadialGradient *gradient = new QRadialGradient(0, 0, 10); gradient->setSpread(QGradient::ReflectSpread); - //scene->setBackgroundBrush(*gradient); + scene->setBackgroundBrush(*gradient);*/ m_frameImage = new QGraphicsPixmapItem(); QTransform qtrans; @@ -165,14 +165,14 @@ m_frameBorder = new QGraphicsRectItem(QRectF(0, 0, m_frameWidth, m_frameHeight)); m_frameBorder->setPen(framepen); m_frameBorder->setZValue(-1100); - m_frameBorder->setBrush(QColor(0, 0, 0, 0)); + m_frameBorder->setBrush(Qt::transparent); m_frameBorder->setFlags(QGraphicsItem::ItemClipsToShape); graphicsView->scene()->addItem(m_frameBorder); initViewports(); graphicsView->show(); - graphicsView->setRenderHint(QPainter::Antialiasing); + //graphicsView->setRenderHint(QPainter::Antialiasing); graphicsView->setInteractive(true); QTimer::singleShot(500, this, SLOT(slotAdjustZoom())); //graphicsView->resize(400, 300); @@ -630,7 +630,7 @@ QPixmap pix(m_frameWidth, m_frameHeight); pix.fill(Qt::transparent); QPainter painter(&pix); - //painter.setRenderHint( QPainter::Antialiasing ); + painter.setRenderHint(QPainter::Antialiasing); m_scene->clearSelection(); QPen framepen = m_frameBorder->pen(); m_frameBorder->setPen(Qt::NoPen); Modified: branches/KDE4/src/transitionsettings.cpp =================================================================== --- branches/KDE4/src/transitionsettings.cpp 2008-09-22 00:53:51 UTC (rev 2400) +++ branches/KDE4/src/transitionsettings.cpp 2008-09-22 12:23:11 UTC (rev 2401) @@ -30,10 +30,10 @@ effectEdit = new EffectStackEdit(ui.frame, this); connect(effectEdit, SIGNAL(seekTimeline(int)), this, SIGNAL(seekTimeline(int))); setEnabled(false); - ui.listWidget->addItems(MainWindow::transitions.effectNames()); - kDebug() << MainWindow::transitions.effectNames().size(); - ui.listWidget->setCurrentRow(0); - connect(ui.listWidget, SIGNAL(currentRowChanged(int)), this, SLOT(slotTransitionChanged())); + ui.transitionList->addItems(MainWindow::transitions.effectNames()); + //kDebug() << MainWindow::transitions.effectNames().size(); + //ui.listWidget->setCurrentRow(0); + connect(ui.transitionList, SIGNAL(activated(int)), this, SLOT(slotTransitionChanged())); connect(this, SIGNAL(transferParamDesc(const QDomElement&, int , int)), effectEdit , SLOT(transferParamDesc(const QDomElement&, int , int))); connect(effectEdit, SIGNAL(parameterChanged(const QDomElement&, const QDomElement&)), this , SLOT(slotUpdateEffectParams(const QDomElement&, const QDomElement&))); ui.splitter->setStretchFactor(0, 1); @@ -48,7 +48,7 @@ void TransitionSettings::slotTransitionChanged(bool reinit) { QDomElement e = m_usedTransition->toXML().cloneNode().toElement(); if (reinit) { - QDomElement newTransition = MainWindow::transitions.getEffectByName(ui.listWidget->currentItem()->text()); + QDomElement newTransition = MainWindow::transitions.getEffectByName(ui.transitionList->currentText()); slotUpdateEffectParams(e, newTransition); emit transferParamDesc(newTransition, m_usedTransition->startPos().frames(KdenliveSettings::project_fps()), m_usedTransition->endPos().frames(KdenliveSettings::project_fps())); } else { @@ -60,16 +60,23 @@ void TransitionSettings::slotTransitionItemSelected(Transition* t) { setEnabled(t != NULL); if (t == m_usedTransition) { + if (t && (t->duration() != m_transitionDuration || t->startPos() != m_transitionStart)) { + m_transitionDuration = t->duration(); + m_transitionStart = t->startPos(); + slotTransitionChanged(false); + } return; } m_usedTransition = t; if (m_usedTransition) { - QList<QListWidgetItem*> list = ui.listWidget->findItems(m_usedTransition->transitionName(), Qt::MatchExactly); - if (list.size() > 0) { - ui.listWidget->blockSignals(true); - ui.listWidget->setCurrentItem(list[0]); + m_transitionDuration = t->duration(); + m_transitionStart = t->startPos(); + int ix = ui.transitionList->findText(m_usedTransition->transitionName(), Qt::MatchExactly); + if (ix != -1) { + ui.transitionList->blockSignals(true); + ui.transitionList->setCurrentIndex(ix); slotTransitionChanged(false); - ui.listWidget->blockSignals(false); + ui.transitionList->blockSignals(false); } } Modified: branches/KDE4/src/transitionsettings.h =================================================================== --- branches/KDE4/src/transitionsettings.h 2008-09-22 00:53:51 UTC (rev 2400) +++ branches/KDE4/src/transitionsettings.h 2008-09-22 12:23:11 UTC (rev 2401) @@ -37,6 +37,8 @@ Ui::TransitionSettings_UI ui; EffectStackEdit *effectEdit; Transition* m_usedTransition; + GenTime m_transitionDuration; + GenTime m_transitionStart; public slots: void slotTransitionItemSelected(Transition*); Modified: branches/KDE4/src/widgets/transitionsettings_ui.ui =================================================================== --- branches/KDE4/src/widgets/transitionsettings_ui.ui 2008-09-22 00:53:51 UTC (rev 2400) +++ branches/KDE4/src/widgets/transitionsettings_ui.ui 2008-09-22 12:23:11 UTC (rev 2401) @@ -14,11 +14,17 @@ </property> <layout class="QGridLayout" name="gridLayout" > <item row="0" column="0" > + <widget class="QLabel" name="label" > + <property name="text" > + <string>Transition type</string> + </property> + </widget> + </item> + <item row="1" column="0" colspan="2" > <widget class="QSplitter" name="splitter" > <property name="orientation" > <enum>Qt::Horizontal</enum> </property> - <widget class="QListWidget" name="listWidget" /> <widget class="QFrame" name="frame" > <property name="sizePolicy" > <sizepolicy vsizetype="Preferred" hsizetype="Expanding" > @@ -35,8 +41,21 @@ </widget> </widget> </item> + <item row="0" column="1" > + <widget class="KComboBox" name="transitionList" /> + </item> </layout> + <zorder>splitter</zorder> + <zorder>label</zorder> + <zorder>transitionList</zorder> </widget> + <customwidgets> + <customwidget> + <class>KComboBox</class> + <extends>QComboBox</extends> + <header>kcombobox.h</header> + </customwidget> + </customwidgets> <resources/> <connections/> </ui> Modified: branches/KDE4/src/widgets/wipeval_ui.ui =================================================================== --- branches/KDE4/src/widgets/wipeval_ui.ui 2008-09-22 00:53:51 UTC (rev 2400) +++ branches/KDE4/src/widgets/wipeval_ui.ui 2008-09-22 12:23:11 UTC (rev 2401) @@ -5,47 +5,24 @@ <rect> <x>0</x> <y>0</y> - <width>193</width> - <height>302</height> + <width>287</width> + <height>191</height> </rect> </property> <property name="windowTitle" > <string>Form</string> </property> <layout class="QGridLayout" name="gridLayout_5" > - <property name="margin" > - <number>0</number> - </property> - <item row="1" column="0" > - <widget class="QGroupBox" name="groupBox_2" > + <item row="0" column="0" > + <widget class="QGroupBox" name="groupBox" > <property name="title" > <string/> </property> - <layout class="QGridLayout" name="gridLayout_3" > - <item row="2" column="1" colspan="2" > - <widget class="QSlider" name="end_transp" > - <property name="maximum" > - <number>100</number> - </property> - <property name="value" > - <number>100</number> - </property> - <property name="orientation" > - <enum>Qt::Horizontal</enum> - </property> - </widget> - </item> - <item row="2" column="0" > - <widget class="QLabel" name="label_2" > - <property name="text" > - <string>Transparency</string> - </property> - </widget> - </item> + <layout class="QGridLayout" name="gridLayout_2" > <item row="0" column="0" > - <widget class="QLabel" name="label_4" > + <widget class="QLabel" name="label_3" > <property name="text" > - <string>End</string> + <string>Start</string> </property> <property name="alignment" > <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set> @@ -53,12 +30,12 @@ </widget> </item> <item row="0" column="1" > - <layout class="QGridLayout" name="gridLayout_4" > + <layout class="QGridLayout" name="gridLayout" > <property name="spacing" > <number>0</number> </property> <item row="0" column="1" > - <widget class="QPushButton" name="end_up" > + <widget class="QPushButton" name="start_up" > <property name="maximumSize" > <size> <width>30</width> @@ -77,7 +54,7 @@ </widget> </item> <item row="1" column="0" > - <widget class="QPushButton" name="end_left" > + <widget class="QPushButton" name="start_left" > <property name="maximumSize" > <size> <width>30</width> @@ -96,7 +73,7 @@ </widget> </item> <item row="1" column="1" > - <widget class="QPushButton" name="end_center" > + <widget class="QPushButton" name="start_center" > <property name="maximumSize" > <size> <width>30</width> @@ -115,7 +92,7 @@ </widget> </item> <item row="1" column="2" > - <widget class="QPushButton" name="end_right" > + <widget class="QPushButton" name="start_right" > <property name="maximumSize" > <size> <width>30</width> @@ -134,7 +111,7 @@ </widget> </item> <item row="2" column="1" > - <widget class="QPushButton" name="end_down" > + <widget class="QPushButton" name="start_down" > <property name="maximumSize" > <size> <width>30</width> @@ -154,65 +131,56 @@ </item> </layout> </item> + <item row="1" column="0" colspan="2" > + <layout class="QHBoxLayout" name="horizontalLayout" > + <item> + <widget class="QLabel" name="label" > + <property name="text" > + <string>Transparency</string> + </property> + </widget> + </item> + <item> + <widget class="QSlider" name="start_transp" > + <property name="maximum" > + <number>100</number> + </property> + <property name="value" > + <number>100</number> + </property> + <property name="orientation" > + <enum>Qt::Horizontal</enum> + </property> + </widget> + </item> + </layout> + </item> </layout> </widget> </item> - <item row="2" column="0" > - <spacer name="verticalSpacer" > - <property name="orientation" > - <enum>Qt::Vertical</enum> - </property> - <property name="sizeHint" stdset="0" > - <size> - <width>20</width> - <height>0</height> - </size> - </property> - </spacer> - </item> - <item row="0" column="0" > - <widget class="QGroupBox" name="groupBox" > + <item row="0" column="1" > + <widget class="QGroupBox" name="groupBox_2" > <property name="title" > <string/> </property> - <layout class="QGridLayout" name="gridLayout_2" > - <item row="2" column="3" colspan="2" > - <widget class="QSlider" name="start_transp" > - <property name="maximum" > - <number>100</number> - </property> - <property name="value" > - <number>100</number> - </property> - <property name="orientation" > - <enum>Qt::Horizontal</enum> - </property> - </widget> - </item> - <item row="2" column="2" > - <widget class="QLabel" name="label" > + <layout class="QGridLayout" name="gridLayout_3" > + <item row="0" column="0" > + <widget class="QLabel" name="label_4" > <property name="text" > - <string>Transparency</string> + <string>End</string> </property> - </widget> - </item> - <item row="0" column="2" > - <widget class="QLabel" name="label_3" > - <property name="text" > - <string>Start</string> - </property> <property name="alignment" > <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set> </property> </widget> </item> - <item row="0" column="3" > - <layout class="QGridLayout" name="gridLayout" > + <item row="0" column="1" > + <layout class="QGridLayout" name="gridLayout_4" > <property name="spacing" > <number>0</number> </property> <item row="0" column="1" > - <widget class="QPushButton" name="start_up" > + <widget class="QPushButton" name="end_up" > <property name="maximumSize" > <size> <width>30</width> @@ -231,7 +199,7 @@ </widget> </item> <item row="1" column="0" > - <widget class="QPushButton" name="start_left" > + <widget class="QPushButton" name="end_left" > <property name="maximumSize" > <size> <width>30</width> @@ -250,7 +218,7 @@ </widget> </item> <item row="1" column="1" > - <widget class="QPushButton" name="start_center" > + <widget class="QPushButton" name="end_center" > <property name="maximumSize" > <size> <width>30</width> @@ -269,7 +237,7 @@ </widget> </item> <item row="1" column="2" > - <widget class="QPushButton" name="start_right" > + <widget class="QPushButton" name="end_right" > <property name="maximumSize" > <size> <width>30</width> @@ -288,7 +256,7 @@ </widget> </item> <item row="2" column="1" > - <widget class="QPushButton" name="start_down" > + <widget class="QPushButton" name="end_down" > <property name="maximumSize" > <size> <width>30</width> @@ -308,9 +276,46 @@ </item> </layout> </item> + <item row="1" column="0" colspan="2" > + <layout class="QHBoxLayout" name="horizontalLayout_2" > + <item> + <widget class="QLabel" name="label_2" > + <property name="text" > + <string>Transparency</string> + </property> + </widget> + </item> + <item> + <widget class="QSlider" name="end_transp" > + <property name="maximum" > + <number>100</number> + </property> + <property name="value" > + <number>100</number> + </property> + <property name="orientation" > + <enum>Qt::Horizontal</enum> + </property> + </widget> + </item> + </layout> + </item> </layout> </widget> </item> + <item row="1" column="0" colspan="2" > + <spacer name="verticalSpacer" > + <property name="orientation" > + <enum>Qt::Vertical</enum> + </property> + <property name="sizeHint" stdset="0" > + <size> + <width>20</width> + <height>0</height> + </size> + </property> + </spacer> + </item> </layout> </widget> <resources/> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <j-...@us...> - 2008-09-22 14:48:03
|
Revision: 2402 http://kdenlive.svn.sourceforge.net/kdenlive/?rev=2402&view=rev Author: j-b-m Date: 2008-09-22 14:47:31 +0000 (Mon, 22 Sep 2008) Log Message: ----------- * Allow user to set number of audio/video tracks at project creation * Remove transitions that where not implemented Modified Paths: -------------- branches/KDE4/src/initeffects.cpp branches/KDE4/src/kdenlivedoc.cpp branches/KDE4/src/kdenlivedoc.h branches/KDE4/src/mainwindow.cpp branches/KDE4/src/projectsettings.cpp branches/KDE4/src/projectsettings.h branches/KDE4/src/widgets/projectsettings_ui.ui Modified: branches/KDE4/src/initeffects.cpp =================================================================== --- branches/KDE4/src/initeffects.cpp 2008-09-22 12:23:11 UTC (rev 2401) +++ branches/KDE4/src/initeffects.cpp 2008-09-22 14:47:31 UTC (rev 2402) @@ -463,6 +463,11 @@ } void initEffects::fillTransitionsList(Mlt::Repository * repository, EffectsList* transitions, QStringList names) { + // remove transitions that are not implemented + int pos = names.indexOf("mix"); + if (pos != -1) names.takeAt(pos); + pos = names.indexOf("region"); + if (pos != -1) names.takeAt(pos); foreach(const QString &name, names) { QDomDocument ret; QDomElement ktrans = ret.createElement("ktransition"); Modified: branches/KDE4/src/kdenlivedoc.cpp =================================================================== --- branches/KDE4/src/kdenlivedoc.cpp 2008-09-22 12:23:11 UTC (rev 2401) +++ branches/KDE4/src/kdenlivedoc.cpp 2008-09-22 14:47:31 UTC (rev 2402) @@ -37,7 +37,7 @@ #include "mainwindow.h" -KdenliveDoc::KdenliveDoc(const KUrl &url, const KUrl &projectFolder, QUndoGroup *undoGroup, const QString &profileName, MainWindow *parent): QObject(parent), m_render(NULL), m_url(url), m_projectFolder(projectFolder), m_commandStack(new QUndoStack(undoGroup)), m_modified(false), m_documentLoadingProgress(0), m_documentLoadingStep(0.0), m_startPos(0), m_zoom(7), m_autosave(NULL) { +KdenliveDoc::KdenliveDoc(const KUrl &url, const KUrl &projectFolder, QUndoGroup *undoGroup, const QString &profileName, const QPoint tracks, MainWindow *parent): QObject(parent), m_render(NULL), m_url(url), m_projectFolder(projectFolder), m_commandStack(new QUndoStack(undoGroup)), m_modified(false), m_documentLoadingProgress(0), m_documentLoadingStep(0.0), m_startPos(0), m_zoom(7), m_autosave(NULL) { m_clipManager = new ClipManager(this); if (!url.isEmpty()) { QString tmpFile; @@ -113,18 +113,18 @@ } else { parent->slotGotProgressInfo(i18n("File %1 is not a Kdenlive project file."), 100); kWarning() << " NO KDENLIVE INFO FOUND IN FILE: " << url.path(); - m_document = createEmptyDocument(); + m_document = createEmptyDocument(tracks.x(), tracks.y()); setProfilePath(profileName); } KIO::NetAccess::removeTempFile(tmpFile); } else { KMessageBox::error(parent, KIO::NetAccess::lastErrorString()); parent->slotGotProgressInfo(i18n("File %1 is not a Kdenlive project file."), 100); - m_document = createEmptyDocument(); + m_document = createEmptyDocument(tracks.x(), tracks.y()); setProfilePath(profileName); } } else { - m_document = createEmptyDocument(); + m_document = createEmptyDocument(tracks.x(), tracks.y()); setProfilePath(profileName); } m_scenelist = m_document.toString(); @@ -144,7 +144,7 @@ m_autosave->remove(); } -QDomDocument KdenliveDoc::createEmptyDocument() { +QDomDocument KdenliveDoc::createEmptyDocument(const int videotracks, const int audiotracks) { // Creating new document QDomDocument doc; QDomElement westley = doc.createElement("westley"); @@ -159,8 +159,6 @@ // create playlists - const int audiotracks = 2; - const int videotracks = 3; int total = audiotracks + videotracks + 1; for (int i = 1; i < total; i++) { @@ -765,7 +763,7 @@ QString titleName = "title"; int counter = 0; QString path = titlesFolder + titleName + QString::number(counter).rightJustified(3, '0', false); - while (QFile::exists(path + ".kdenlivetitle")) { + while (QFile::exists(path + ".png")) { counter++; path = titlesFolder + titleName + QString::number(counter).rightJustified(3, '0', false); } Modified: branches/KDE4/src/kdenlivedoc.h =================================================================== --- branches/KDE4/src/kdenlivedoc.h 2008-09-22 12:23:11 UTC (rev 2401) +++ branches/KDE4/src/kdenlivedoc.h 2008-09-22 14:47:31 UTC (rev 2402) @@ -46,7 +46,7 @@ class KdenliveDoc: public QObject { Q_OBJECT public: - KdenliveDoc(const KUrl &url, const KUrl &projectFolder, QUndoGroup *undoGroup, const QString &profileName, MainWindow *parent = 0); + KdenliveDoc(const KUrl &url, const KUrl &projectFolder, QUndoGroup *undoGroup, const QString &profileName, const QPoint tracks, MainWindow *parent = 0); ~KdenliveDoc(); QDomNodeList producersList(); double fps() const; @@ -129,7 +129,7 @@ double m_documentLoadingStep; double m_documentLoadingProgress; void convertDocument(double version); - QDomDocument createEmptyDocument(); + QDomDocument createEmptyDocument(const int videotracks, const int audiotracks); public slots: void slotCreateTextClip(QString group, const QString &groupId); Modified: branches/KDE4/src/mainwindow.cpp =================================================================== --- branches/KDE4/src/mainwindow.cpp 2008-09-22 12:23:11 UTC (rev 2401) +++ branches/KDE4/src/mainwindow.cpp 2008-09-22 14:47:31 UTC (rev 2402) @@ -777,15 +777,17 @@ void MainWindow::newFile() { QString profileName; KUrl projectFolder; + QPoint projectTracks(3, 2); if (m_timelineArea->count() == 0) profileName = KdenliveSettings::default_profile(); else { ProjectSettings *w = new ProjectSettings; if (w->exec() != QDialog::Accepted) return; profileName = w->selectedProfile(); projectFolder = w->selectedFolder(); + projectTracks = w->tracks(); delete w; } - KdenliveDoc *doc = new KdenliveDoc(KUrl(), projectFolder, m_commandStack, profileName, this); + KdenliveDoc *doc = new KdenliveDoc(KUrl(), projectFolder, m_commandStack, profileName, projectTracks, this); doc->m_autosave = new KAutoSaveFile(KUrl(), doc); TrackView *trackView = new TrackView(doc, this); m_timelineArea->addTab(trackView, KIcon("kdenlive"), doc->description()); @@ -899,7 +901,7 @@ void MainWindow::doOpenFile(const KUrl &url, KAutoSaveFile *stale) { KdenliveDoc *doc; - doc = new KdenliveDoc(url, KUrl(), m_commandStack, QString(), this); + doc = new KdenliveDoc(url, KUrl(), m_commandStack, QString(), QPoint(3, 2), this); if (stale == NULL) { stale = new KAutoSaveFile(url, doc); doc->m_autosave = stale; Modified: branches/KDE4/src/projectsettings.cpp =================================================================== --- branches/KDE4/src/projectsettings.cpp 2008-09-22 12:23:11 UTC (rev 2401) +++ branches/KDE4/src/projectsettings.cpp 2008-09-22 14:47:31 UTC (rev 2402) @@ -49,6 +49,8 @@ //buttonOk->setEnabled(false); m_view.audio_thumbs->setChecked(KdenliveSettings::audiothumbnails()); m_view.video_thumbs->setChecked(KdenliveSettings::videothumbnails()); + m_view.audio_tracks->setValue(2); + m_view.video_tracks->setValue(3); slotUpdateDisplay(); connect(m_view.profiles_list, SIGNAL(currentIndexChanged(int)), this, SLOT(slotUpdateDisplay())); connect(m_view.project_folder, SIGNAL(textChanged(const QString &)), this, SLOT(slotUpdateButton(const QString &))); @@ -79,6 +81,13 @@ return m_view.project_folder->url(); } +QPoint ProjectSettings::tracks() { + QPoint p; + p.setX(m_view.video_tracks->value()); + p.setY(m_view.audio_tracks->value()); + return p; +} + #include "projectsettings.moc" Modified: branches/KDE4/src/projectsettings.h =================================================================== --- branches/KDE4/src/projectsettings.h 2008-09-22 12:23:11 UTC (rev 2401) +++ branches/KDE4/src/projectsettings.h 2008-09-22 14:47:31 UTC (rev 2402) @@ -33,6 +33,7 @@ ProjectSettings(QWidget * parent = 0); QString selectedProfile() const; KUrl selectedFolder() const; + QPoint tracks(); private slots: void slotUpdateDisplay(); Modified: branches/KDE4/src/widgets/projectsettings_ui.ui =================================================================== --- branches/KDE4/src/widgets/projectsettings_ui.ui 2008-09-22 12:23:11 UTC (rev 2401) +++ branches/KDE4/src/widgets/projectsettings_ui.ui 2008-09-22 14:47:31 UTC (rev 2402) @@ -5,25 +5,25 @@ <rect> <x>0</x> <y>0</y> - <width>370</width> - <height>257</height> + <width>315</width> + <height>273</height> </rect> </property> <property name="windowTitle" > <string>Project Settings</string> </property> <layout class="QGridLayout" name="gridLayout_3" > - <item row="0" column="0" colspan="2" > + <item row="0" column="0" colspan="3" > <widget class="QLabel" name="label_4" > <property name="text" > <string>Project folder</string> </property> </widget> </item> - <item row="0" column="2" colspan="3" > + <item row="0" column="3" colspan="5" > <widget class="KUrlRequester" name="project_folder" /> </item> - <item row="1" column="0" colspan="5" > + <item row="1" column="0" colspan="8" > <widget class="QGroupBox" name="properties" > <property name="title" > <string>Video Profile</string> @@ -109,28 +109,61 @@ </layout> </widget> </item> - <item row="2" column="0" > + <item row="2" column="0" colspan="2" > + <widget class="QLabel" name="label_7" > + <property name="text" > + <string>Video tracks</string> + </property> + </widget> + </item> + <item row="2" column="2" colspan="2" > + <widget class="QSpinBox" name="video_tracks" /> + </item> + <item row="2" column="4" colspan="2" > + <widget class="QLabel" name="label_8" > + <property name="text" > + <string>Audio tracks</string> + </property> + </widget> + </item> + <item row="2" column="6" > + <widget class="QSpinBox" name="audio_tracks" /> + </item> + <item row="2" column="7" > + <spacer name="horizontalSpacer_2" > + <property name="orientation" > + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0" > + <size> + <width>67</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + <item row="3" column="0" > <widget class="QLabel" name="label_2" > <property name="text" > <string>Thumbnails:</string> </property> </widget> </item> - <item row="2" column="1" colspan="2" > + <item row="3" column="1" colspan="3" > <widget class="QCheckBox" name="video_thumbs" > <property name="text" > <string>Video</string> </property> </widget> </item> - <item row="2" column="3" > + <item row="3" column="4" > <widget class="QCheckBox" name="audio_thumbs" > <property name="text" > <string>Audio</string> </property> </widget> </item> - <item row="2" column="4" > + <item row="3" column="5" colspan="3" > <spacer name="horizontalSpacer" > <property name="orientation" > <enum>Qt::Horizontal</enum> @@ -143,7 +176,7 @@ </property> </spacer> </item> - <item row="3" column="0" colspan="5" > + <item row="4" column="3" colspan="3" > <spacer name="verticalSpacer" > <property name="orientation" > <enum>Qt::Vertical</enum> @@ -156,7 +189,7 @@ </property> </spacer> </item> - <item row="4" column="1" colspan="4" > + <item row="5" column="1" colspan="7" > <widget class="QDialogButtonBox" name="buttonBox" > <property name="orientation" > <enum>Qt::Horizontal</enum> @@ -167,6 +200,19 @@ </widget> </item> </layout> + <zorder>label_4</zorder> + <zorder>project_folder</zorder> + <zorder>properties</zorder> + <zorder>label_2</zorder> + <zorder>video_thumbs</zorder> + <zorder>audio_thumbs</zorder> + <zorder>buttonBox</zorder> + <zorder>label_6</zorder> + <zorder>horizontalSpacer_2</zorder> + <zorder>label_8</zorder> + <zorder>label_7</zorder> + <zorder>video_tracks</zorder> + <zorder>audio_tracks</zorder> </widget> <customwidgets> <customwidget> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <j-...@us...> - 2008-09-22 17:42:19
|
Revision: 2403 http://kdenlive.svn.sourceforge.net/kdenlive/?rev=2403&view=rev Author: j-b-m Date: 2008-09-22 17:42:12 +0000 (Mon, 22 Sep 2008) Log Message: ----------- start implementing monitor zone Modified Paths: -------------- branches/KDE4/src/customruler.cpp branches/KDE4/src/customruler.h branches/KDE4/src/mainwindow.cpp branches/KDE4/src/monitor.cpp branches/KDE4/src/monitor.h branches/KDE4/src/smallruler.cpp branches/KDE4/src/smallruler.h branches/KDE4/src/trackview.cpp branches/KDE4/src/trackview.h Modified: branches/KDE4/src/customruler.cpp =================================================================== --- branches/KDE4/src/customruler.cpp 2008-09-22 14:47:31 UTC (rev 2402) +++ branches/KDE4/src/customruler.cpp 2008-09-22 17:42:12 UTC (rev 2403) @@ -107,6 +107,7 @@ m_zoneStart += move; m_zoneEnd += move; } + emit zoneMoved(m_zoneStart, m_zoneEnd); m_view->setDocumentModified(); update(); } else { @@ -197,12 +198,12 @@ p.setClipRect(e->rect()); const int projectEnd = (int)(m_duration * m_factor); - p.fillRect(QRect(- offset(), e->rect().y(), projectEnd, e->rect().height()), QBrush(QColor(245, 245, 245))); + p.fillRect(QRect(0, 0, projectEnd - offset(), height()), QBrush(QColor(245, 245, 245))); const int zoneStart = (int)(m_zoneStart * m_factor); const int zoneEnd = (int)(m_zoneEnd * m_factor); - p.fillRect(QRect(zoneStart - offset(), e->rect().y() + e->rect().height() / 2, zoneEnd - zoneStart, e->rect().height() / 2), QBrush(QColor(133, 255, 143))); + p.fillRect(QRect(zoneStart - offset(), height() / 2, zoneEnd - zoneStart, height() / 2), QBrush(QColor(133, 255, 143))); const int value = m_view->cursorPos() * m_factor - offset(); const int minval = minimum(); Modified: branches/KDE4/src/customruler.h =================================================================== --- branches/KDE4/src/customruler.h 2008-09-22 14:47:31 UTC (rev 2402) +++ branches/KDE4/src/customruler.h 2008-09-22 17:42:12 UTC (rev 2403) @@ -40,6 +40,9 @@ public slots: void slotMoveRuler(int newPos); void slotCursorMoved(int oldpos, int newpos); + +signals: + void zoneMoved(int, int); }; #endif Modified: branches/KDE4/src/mainwindow.cpp =================================================================== --- branches/KDE4/src/mainwindow.cpp 2008-09-22 14:47:31 UTC (rev 2402) +++ branches/KDE4/src/mainwindow.cpp 2008-09-22 17:42:12 UTC (rev 2403) @@ -1119,6 +1119,7 @@ disconnect(transitionConfig, SIGNAL(transitionUpdated(Transition *, QDomElement)), trackView->projectView() , SLOT(slotTransitionUpdated(Transition *, QDomElement))); disconnect(transitionConfig, SIGNAL(seekTimeline(int)), trackView->projectView() , SLOT(setCursorPos(int))); disconnect(m_activeTimeline->projectView(), SIGNAL(activateDocumentMonitor()), m_projectMonitor, SLOT(activateMonitor())); + disconnect(trackView, SIGNAL(zoneMoved(int, int)), m_projectMonitor, SLOT(slotZoneMoved(int, int))); effectStack->clear(); } m_activeDocument->setRenderer(NULL); @@ -1170,6 +1171,8 @@ connect(effectStack, SIGNAL(reloadEffects()), this, SLOT(slotReloadEffects())); connect(trackView->projectView(), SIGNAL(activateDocumentMonitor()), m_projectMonitor, SLOT(activateMonitor())); + connect(trackView, SIGNAL(zoneMoved(int, int)), m_projectMonitor, SLOT(slotZoneMoved(int, int))); + trackView->projectView()->setContextMenu(m_timelineContextMenu, m_timelineContextClipMenu, m_timelineContextTransitionMenu); m_activeTimeline = trackView; if (m_renderWidget) m_renderWidget->setDocumentStandard(doc->getDocumentStandard()); Modified: branches/KDE4/src/monitor.cpp =================================================================== --- branches/KDE4/src/monitor.cpp 2008-09-22 14:47:31 UTC (rev 2402) +++ branches/KDE4/src/monitor.cpp 2008-09-22 17:42:12 UTC (rev 2403) @@ -190,10 +190,14 @@ ui.video_frame->setMinimumSize(0, 0); } +void Monitor::slotZoneMoved(int start, int end) { + m_ruler->setZone(start, end); +} + // virtual void Monitor::mousePressEvent(QMouseEvent * event) { if (event->button() != Qt::RightButton) { - slotPlay(); + if (ui.video_frame->underMouse()) slotPlay(); } else m_contextMenu->popup(event->globalPos()); } Modified: branches/KDE4/src/monitor.h =================================================================== --- branches/KDE4/src/monitor.h 2008-09-22 14:47:31 UTC (rev 2402) +++ branches/KDE4/src/monitor.h 2008-09-22 17:42:12 UTC (rev 2403) @@ -102,6 +102,7 @@ void saveSceneList(QString path, QDomElement info = QDomElement()); void slotStart(); void slotEnd(); + void slotZoneMoved(int start, int end); signals: void renderPosition(int); Modified: branches/KDE4/src/smallruler.cpp =================================================================== --- branches/KDE4/src/smallruler.cpp 2008-09-22 14:47:31 UTC (rev 2402) +++ branches/KDE4/src/smallruler.cpp 2008-09-22 17:42:12 UTC (rev 2403) @@ -28,6 +28,8 @@ SmallRuler::SmallRuler(QWidget *parent) : QWidget(parent), m_scale(1), m_maxval(25) { + m_zoneStart = 10; + m_zoneEnd = 60; } void SmallRuler::adjustScale(int maximum) { @@ -49,6 +51,12 @@ update(); } +void SmallRuler::setZone(int start, int end) { + m_zoneStart = start; + m_zoneEnd = end; + update(); +} + // virtual void SmallRuler::mousePressEvent(QMouseEvent * event) { const int pos = event->x() / m_scale; @@ -87,6 +95,11 @@ double f, fend; p.setPen(palette().dark().color()); + const int zoneStart = (int)(m_zoneStart * m_scale); + const int zoneEnd = (int)(m_zoneEnd * m_scale); + + p.fillRect(QRect(zoneStart, height() / 2, zoneEnd - zoneStart, height() / 2), QBrush(QColor(133, 255, 143))); + if (r.top() < 9) { // draw the little marks fend = m_scale * m_small; Modified: branches/KDE4/src/smallruler.h =================================================================== --- branches/KDE4/src/smallruler.h 2008-09-22 14:47:31 UTC (rev 2402) +++ branches/KDE4/src/smallruler.h 2008-09-22 17:42:12 UTC (rev 2403) @@ -31,6 +31,7 @@ virtual void mousePressEvent(QMouseEvent * event); virtual void mouseMoveEvent(QMouseEvent * event); void adjustScale(int maximum); + void setZone(int start, int end); protected: virtual void paintEvent(QPaintEvent *e); @@ -43,6 +44,8 @@ int m_medium; int m_small; int m_maxval; + int m_zoneStart; + int m_zoneEnd; public slots: void slotNewValue(int value); Modified: branches/KDE4/src/trackview.cpp =================================================================== --- branches/KDE4/src/trackview.cpp 2008-09-22 14:47:31 UTC (rev 2402) +++ branches/KDE4/src/trackview.cpp 2008-09-22 17:42:12 UTC (rev 2403) @@ -49,6 +49,7 @@ //m_scene->addRect(QRectF(0, 0, 100, 100), QPen(), QBrush(Qt::red)); m_ruler = new CustomRuler(doc->timecode(), m_trackview); + connect(m_ruler, SIGNAL(zoneMoved(int, int)), this, SIGNAL(zoneMoved(int, int))); QHBoxLayout *layout = new QHBoxLayout; view->ruler_frame->setLayout(layout); int left_margin; Modified: branches/KDE4/src/trackview.h =================================================================== --- branches/KDE4/src/trackview.h 2008-09-22 14:47:31 UTC (rev 2402) +++ branches/KDE4/src/trackview.h 2008-09-22 17:42:12 UTC (rev 2403) @@ -98,6 +98,7 @@ void cursorMoved(); void clipItemSelected(ClipItem*); void transitionItemSelected(Transition*); + void zoneMoved(int, int); }; #endif This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <j-...@us...> - 2008-09-24 16:26:56
|
Revision: 2405 http://kdenlive.svn.sourceforge.net/kdenlive/?rev=2405&view=rev Author: j-b-m Date: 2008-09-24 16:04:48 +0000 (Wed, 24 Sep 2008) Log Message: ----------- Fully functionnal zone in monitors, enable drag & drop from clip monitor Modified Paths: -------------- branches/KDE4/src/customtrackview.cpp branches/KDE4/src/customtrackview.h branches/KDE4/src/monitor.cpp branches/KDE4/src/monitor.h branches/KDE4/src/projectlistview.cpp branches/KDE4/src/renderer.cpp branches/KDE4/src/smallruler.cpp Modified: branches/KDE4/src/customtrackview.cpp =================================================================== --- branches/KDE4/src/customtrackview.cpp 2008-09-22 21:23:02 UTC (rev 2404) +++ branches/KDE4/src/customtrackview.cpp 2008-09-24 16:04:48 UTC (rev 2405) @@ -749,7 +749,14 @@ } void CustomTrackView::dragEnterEvent(QDragEnterEvent * event) { - if (event->mimeData()->hasFormat("kdenlive/producerslist")) { + if (event->mimeData()->hasFormat("kdenlive/clip")) { + QStringList list = QString(event->mimeData()->data("kdenlive/clip")).split(";"); + kDebug() << "DRAG ENTER EVENT, DATA: " << list; + DocClipBase *clip = m_document->getBaseClip(list.at(0)); + if (clip == NULL) kDebug() << " WARNING))))))))) CLIP NOT FOUND : " << list.at(0); + addItem(clip, event->pos(), QPoint(list.at(1).toInt(), list.at(2).toInt())); + event->acceptProposedAction(); + } else if (event->mimeData()->hasFormat("kdenlive/producerslist")) { kDebug() << "/////////////// DRAG ENTERED, TEXT: " << event->mimeData()->data("kdenlive/producerslist"); QStringList ids = QString(event->mimeData()->data("kdenlive/producerslist")).split(";"); //TODO: drop of several clips @@ -1003,7 +1010,18 @@ scene()->addItem(m_dropItem); } +void CustomTrackView::addItem(DocClipBase *clip, QPoint pos, QPoint zone) { + ItemInfo info; + info.startPos = GenTime((int)(mapToScene(pos).x()), m_document->fps()); + info.cropStart = GenTime(zone.x(), m_document->fps()); + info.endPos = info.startPos + GenTime(zone.y() - zone.x(), m_document->fps()); + info.track = (int)(pos.y() / m_tracksHeight); + kDebug() << "------------ ADDING CLIP ZONE ITEM----: " << zone; + m_dropItem = new ClipItem(clip, info, m_document->fps()); + scene()->addItem(m_dropItem); +} + void CustomTrackView::dragMoveEvent(QDragMoveEvent * event) { event->setDropAction(Qt::IgnoreAction); if (m_dropItem) { @@ -1011,7 +1029,7 @@ int pos = mapToScene(event->pos()).x(); m_dropItem->setPos(pos, track * m_tracksHeight + 1); event->setDropAction(Qt::MoveAction); - if (event->mimeData()->hasFormat("kdenlive/producerslist")) { + if (event->mimeData()->hasFormat("kdenlive/producerslist") || event->mimeData()->hasFormat("kdenlive/clip")) { event->acceptProposedAction(); } } else { @@ -1051,6 +1069,7 @@ // list of accepted mime types for drop qstrList.append("text/plain"); qstrList.append("kdenlive/producerslist"); + qstrList.append("kdenlive/clip"); return qstrList; } Modified: branches/KDE4/src/customtrackview.h =================================================================== --- branches/KDE4/src/customtrackview.h 2008-09-22 21:23:02 UTC (rev 2404) +++ branches/KDE4/src/customtrackview.h 2008-09-24 16:04:48 UTC (rev 2405) @@ -146,6 +146,7 @@ KdenliveDoc *m_document; CustomTrackScene *m_scene; void addItem(DocClipBase *clip, QPoint pos); + void addItem(DocClipBase *clip, QPoint pos, QPoint zone); QGraphicsLineItem *m_cursorLine; ItemInfo m_dragItemInfo; OPERATIONTYPE m_operationMode; Modified: branches/KDE4/src/monitor.cpp =================================================================== --- branches/KDE4/src/monitor.cpp 2008-09-22 21:23:02 UTC (rev 2404) +++ branches/KDE4/src/monitor.cpp 2008-09-24 16:04:48 UTC (rev 2405) @@ -37,7 +37,7 @@ #include "docclipbase.h" Monitor::Monitor(QString name, MonitorManager *manager, QWidget *parent) - : QWidget(parent), render(NULL), m_monitorManager(manager), m_name(name), m_isActive(false), m_currentClip(NULL) { + : QWidget(parent), render(NULL), m_monitorManager(manager), m_name(name), m_isActive(false), m_currentClip(NULL), m_dragStarted(false) { ui.setupUi(this); m_scale = 1; m_ruler = new SmallRuler(); @@ -198,11 +198,82 @@ // virtual void Monitor::mousePressEvent(QMouseEvent * event) { if (event->button() != Qt::RightButton) { - if (ui.video_frame->underMouse()) slotPlay(); + if (ui.video_frame->underMouse()) { + m_dragStarted = true; + m_DragStartPosition = event->pos(); + } } else m_contextMenu->popup(event->globalPos()); } // virtual +void Monitor::mouseReleaseEvent(QMouseEvent * event) { + if (m_dragStarted) { + if (ui.video_frame->underMouse()) { + slotPlay(); + } else QWidget::mouseReleaseEvent(event); + m_dragStarted = false; + } +} + + +// virtual +void Monitor::mouseMoveEvent(QMouseEvent *event) { + kDebug() << "// DRAG STARTED, MOUSE MOVED: "; + if (!m_dragStarted || m_currentClip == NULL) return; + + if ((event->pos() - m_DragStartPosition).manhattanLength() + < QApplication::startDragDistance()) + return; + + { + QDrag *drag = new QDrag(this); + QMimeData *mimeData = new QMimeData; + + QStringList list; + list.append(m_currentClip->getId()); + QPoint p = m_ruler->zone(); + list.append(QString::number(p.x())); + list.append(QString::number(p.y())); + QByteArray data; + data.append(list.join(";").toUtf8()); + mimeData->setData("kdenlive/clip", data); + drag->setMimeData(mimeData); + QPixmap pix = m_currentClip->thumbnail(); + drag->setPixmap(pix); + drag->setHotSpot(QPoint(0, 50)); + drag->start(Qt::MoveAction); + + //Qt::DropAction dropAction; + //dropAction = drag->start(Qt::CopyAction | Qt::MoveAction); + + //Qt::DropAction dropAction = drag->exec(); + + } + //event->accept(); +} + +/*void Monitor::dragMoveEvent(QDragMoveEvent * event) { + event->setDropAction(Qt::IgnoreAction); + event->setDropAction(Qt::MoveAction); + if (event->mimeData()->hasText()) { + event->acceptProposedAction(); + } +} + +Qt::DropActions Monitor::supportedDropActions() const { + // returns what actions are supported when dropping + return Qt::MoveAction; +}*/ + +QStringList Monitor::mimeTypes() const { + QStringList qstrList; + // list of accepted mime types for drop + qstrList.append("kdenlive/clip"); + return qstrList; +} + + +// virtual void Monitor::wheelEvent(QWheelEvent * event) { if (event->modifiers() == Qt::ControlModifier) { int delta = m_monitorManager->timecode().fps(); Modified: branches/KDE4/src/monitor.h =================================================================== --- branches/KDE4/src/monitor.h 2008-09-22 21:23:02 UTC (rev 2404) +++ branches/KDE4/src/monitor.h 2008-09-24 16:04:48 UTC (rev 2405) @@ -55,7 +55,13 @@ protected: virtual void mousePressEvent(QMouseEvent * event); + virtual void mouseReleaseEvent(QMouseEvent * event); virtual void wheelEvent(QWheelEvent * event); + virtual void mouseMoveEvent(QMouseEvent *event); + virtual QStringList mimeTypes() const; + /* virtual void dragMoveEvent(QDragMoveEvent * event); + virtual Qt::DropActions supportedDropActions() const;*/ + // virtual void resizeEvent(QResizeEvent * event); // virtual void paintEvent(QPaintEvent * event); @@ -75,6 +81,8 @@ QAction *m_playAction; QMenu *m_contextMenu; DocClipBase *m_currentClip; + QPoint m_DragStartPosition; + bool m_dragStarted; private slots: void adjustRulerSize(int length); Modified: branches/KDE4/src/projectlistview.cpp =================================================================== --- branches/KDE4/src/projectlistview.cpp 2008-09-22 21:23:02 UTC (rev 2404) +++ branches/KDE4/src/projectlistview.cpp 2008-09-24 16:04:48 UTC (rev 2405) @@ -237,6 +237,7 @@ } } +// virtual void ProjectListView::dragMoveEvent(QDragMoveEvent * event) { QTreeWidgetItem * item = itemAt(event->pos()); event->setDropAction(Qt::IgnoreAction); Modified: branches/KDE4/src/renderer.cpp =================================================================== --- branches/KDE4/src/renderer.cpp 2008-09-22 21:23:02 UTC (rev 2404) +++ branches/KDE4/src/renderer.cpp 2008-09-24 16:04:48 UTC (rev 2405) @@ -1215,8 +1215,8 @@ mlt_service_lock(service.get_service()); Mlt::Producer trackProducer(tractor.track(info.track)); Mlt::Playlist trackPlaylist((mlt_playlist) trackProducer.get_service()); - - Mlt::Producer *clip = prod->cut(info.cropStart.frames(m_fps), (info.endPos - info.startPos).frames(m_fps) - 1); + //kDebug()<<"/// INSERT cLIP: "<<info.cropStart.frames(m_fps)<<", "<<info.startPos.frames(m_fps)<<"-"<<info.endPos.frames(m_fps); + Mlt::Producer *clip = prod->cut((int) info.cropStart.frames(m_fps), (int)(info.endPos - info.startPos + info.cropStart).frames(m_fps) - 1); int newIndex = trackPlaylist.insert_at((int) info.startPos.frames(m_fps), *clip, 1); if (QString(prod->get("transparency")).toInt() == 1) Modified: branches/KDE4/src/smallruler.cpp =================================================================== --- branches/KDE4/src/smallruler.cpp 2008-09-22 21:23:02 UTC (rev 2404) +++ branches/KDE4/src/smallruler.cpp 2008-09-24 16:04:48 UTC (rev 2405) @@ -53,14 +53,22 @@ void SmallRuler::setZone(int start, int end) { if (start != -1) { - if (end != -1 && start >= end) return; - else if (end == -1 && start >= m_zoneEnd) return; - m_zoneStart = start; + if (end != -1 && start >= end) { + m_zoneEnd = qMin(m_maxval, end + (start - m_zoneStart)); + m_zoneStart = start; + } else if (end == -1 && start >= m_zoneEnd) { + m_zoneEnd = qMin(m_maxval, m_zoneEnd + (start - m_zoneStart)); + m_zoneStart = start; + } else m_zoneStart = start; } if (end != -1) { - if (start != -1 && end <= start) end = m_zoneEnd; - else if (start == -1 && end <= m_zoneStart) end = m_zoneEnd; - m_zoneEnd = end; + if (start != -1 && end <= start) { + m_zoneStart = qMax(0, start - (m_zoneEnd - end)); + m_zoneEnd = end; + } else if (start == -1 && end <= m_zoneStart) { + m_zoneStart = qMax(0, m_zoneStart - (m_zoneEnd - end)); + m_zoneEnd = end; + } else m_zoneEnd = end; } update(); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <j-...@us...> - 2008-09-24 18:40:02
|
Revision: 2406 http://kdenlive.svn.sourceforge.net/kdenlive/?rev=2406&view=rev Author: j-b-m Date: 2008-09-24 18:39:58 +0000 (Wed, 24 Sep 2008) Log Message: ----------- cleanup and make play/loop section work Modified Paths: -------------- branches/KDE4/src/monitor.cpp branches/KDE4/src/monitor.h branches/KDE4/src/renderer.cpp branches/KDE4/src/renderer.h branches/KDE4/src/smallruler.cpp branches/KDE4/src/smallruler.h Modified: branches/KDE4/src/monitor.cpp =================================================================== --- branches/KDE4/src/monitor.cpp 2008-09-24 16:04:48 UTC (rev 2405) +++ branches/KDE4/src/monitor.cpp 2008-09-24 18:39:58 UTC (rev 2406) @@ -54,8 +54,8 @@ m_playIcon = KIcon("media-playback-start"); m_pauseIcon = KIcon("media-playback-pause"); - toolbar->addAction(KIcon("kdenlive-zone-start"), i18n("Set zone start"), this, SLOT(slotSetZoneStart())); - toolbar->addAction(KIcon("kdenlive-zone-end"), i18n("Set zone end"), this, SLOT(slotSetZoneEnd())); + QAction *zoneStart = toolbar->addAction(KIcon("kdenlive-zone-start"), i18n("Set zone start"), this, SLOT(slotSetZoneStart())); + QAction *zoneEnd = toolbar->addAction(KIcon("kdenlive-zone-end"), i18n("Set zone end"), this, SLOT(slotSetZoneEnd())); toolbar->addAction(KIcon("media-seek-backward"), i18n("Rewind"), this, SLOT(slotRewind())); toolbar->addAction(KIcon("media-skip-backward"), i18n("Rewind 1 frame"), this, SLOT(slotRewindOneFrame())); @@ -69,8 +69,8 @@ m_playAction = playMenu->addAction(m_playIcon, i18n("Play")); m_playAction->setCheckable(true); connect(m_playAction, SIGNAL(triggered()), this, SLOT(slotPlay())); - playMenu->addAction(m_playIcon, i18n("Play Section"), this, SLOT(slotPlay())); - playMenu->addAction(m_playIcon, i18n("Loop Section"), this, SLOT(slotPlay())); + playMenu->addAction(m_playIcon, i18n("Play Section"), this, SLOT(slotPlayZone())); + playMenu->addAction(m_playIcon, i18n("Loop Section"), this, SLOT(slotLoopZone())); toolbar->addAction(KIcon("media-skip-forward"), i18n("Forward 1 frame"), this, SLOT(slotForwardOneFrame())); toolbar->addAction(KIcon("media-seek-forward"), i18n("Forward"), this, SLOT(slotForward())); @@ -109,8 +109,20 @@ m_contextMenu = new QMenu(this); m_contextMenu->addMenu(playMenu); + + QMenu *goMenu = new QMenu(i18n("Go to..."), this); + goMenu->addAction(i18n("Start"), this, SLOT(slotStart())); + goMenu->addAction(i18n("End"), this, SLOT(slotEnd())); + goMenu->addAction(i18n("Zone start"), this, SLOT(slotZoneStart())); + goMenu->addAction(i18n("Zone end"), this, SLOT(slotZoneEnd())); + m_contextMenu->addMenu(goMenu); + + m_contextMenu->addAction(zoneStart); + m_contextMenu->addAction(zoneEnd); + QAction *extractFrame = m_contextMenu->addAction(KIcon("document-new"), i18n("Extract frame"), this, SLOT(slotExtractCurrentFrame())); connect(m_ruler, SIGNAL(seekRenderer(int)), this, SLOT(slotSeek(int))); + connect(m_ruler, SIGNAL(zoneChanged(QPoint)), this, SIGNAL(zoneUpdated(QPoint))); connect(render, SIGNAL(durationChanged(int)), this, SLOT(adjustRulerSize(int))); connect(render, SIGNAL(rendererPosition(int)), this, SLOT(seekCursor(int))); connect(render, SIGNAL(rendererStopped(int)), this, SLOT(rendererStopped(int))); @@ -239,6 +251,7 @@ mimeData->setData("kdenlive/clip", data); drag->setMimeData(mimeData); QPixmap pix = m_currentClip->thumbnail(); + kDebug() << "/ / / /CLIP DRAGGED PIXMAP: " << pix.width() << "x" << pix.height(); drag->setPixmap(pix); drag->setHotSpot(QPoint(0, 50)); drag->start(Qt::MoveAction); @@ -330,6 +343,24 @@ m_timePos->setText(m_monitorManager->timecode().getTimecodeFromFrames(m_position)); } +void Monitor::slotZoneStart() { + if (!m_isActive) m_monitorManager->activateMonitor(m_name); + render->play(0); + m_position = m_ruler->zone().x(); + render->seekToFrame(m_position); + emit renderPosition(m_position); + m_timePos->setText(m_monitorManager->timecode().getTimecodeFromFrames(m_position)); +} + +void Monitor::slotZoneEnd() { + if (!m_isActive) m_monitorManager->activateMonitor(m_name); + render->play(0); + m_position = m_ruler->zone().y(); + render->seekToFrame(m_position); + emit renderPosition(m_position); + m_timePos->setText(m_monitorManager->timecode().getTimecodeFromFrames(m_position)); +} + void Monitor::slotRewind(double speed) { if (!m_isActive) m_monitorManager->activateMonitor(m_name); if (speed == 0) { @@ -432,6 +463,24 @@ m_playAction->setIcon(m_pauseIcon); } +void Monitor::slotPlayZone() { + if (render == NULL) return; + if (!m_isActive) m_monitorManager->activateMonitor(m_name); + QPoint p = m_ruler->zone(); + render->playZone(GenTime(p.x(), render->fps()), GenTime(p.y(), render->fps())); + m_playAction->setChecked(true); + m_playAction->setIcon(m_pauseIcon); +} + +void Monitor::slotLoopZone() { + if (render == NULL) return; + if (!m_isActive) m_monitorManager->activateMonitor(m_name); + QPoint p = m_ruler->zone(); + render->loopZone(GenTime(p.x(), render->fps()), GenTime(p.y(), render->fps())); + m_playAction->setChecked(true); + m_playAction->setIcon(m_pauseIcon); +} + void Monitor::slotSetXml(DocClipBase *clip, const int position) { if (render == NULL) return; if (!m_isActive) m_monitorManager->activateMonitor(m_name); Modified: branches/KDE4/src/monitor.h =================================================================== --- branches/KDE4/src/monitor.h 2008-09-24 16:04:48 UTC (rev 2405) +++ branches/KDE4/src/monitor.h 2008-09-24 18:39:58 UTC (rev 2406) @@ -105,6 +105,8 @@ void start(); void activateMonitor(); void slotPlay(); + void slotPlayZone(); + void slotLoopZone(); void slotForward(double speed = 0); void slotRewind(double speed = 0); void slotRewindOneFrame(); @@ -112,6 +114,8 @@ void saveSceneList(QString path, QDomElement info = QDomElement()); void slotStart(); void slotEnd(); + void slotZoneStart(); + void slotZoneEnd(); void slotZoneMoved(int start, int end); signals: Modified: branches/KDE4/src/renderer.cpp =================================================================== --- branches/KDE4/src/renderer.cpp 2008-09-24 16:04:48 UTC (rev 2405) +++ branches/KDE4/src/renderer.cpp 2008-09-24 18:39:58 UTC (rev 2406) @@ -65,13 +65,13 @@ } } -Render::Render(const QString & rendererName, int winid, int extid, QWidget *parent): QObject(parent), m_name(rendererName), m_mltConsumer(NULL), m_mltProducer(NULL), m_mltTextProducer(NULL), m_winid(winid), m_externalwinid(extid), m_framePosition(0), m_isBlocked(true), m_blackClip(NULL), m_isSplitView(false) { +Render::Render(const QString & rendererName, int winid, int extid, QWidget *parent): QObject(parent), m_name(rendererName), m_mltConsumer(NULL), m_mltProducer(NULL), m_mltTextProducer(NULL), m_winid(winid), m_externalwinid(extid), m_framePosition(0), m_isBlocked(true), m_blackClip(NULL), m_isSplitView(false), m_isZoneMode(false), m_isLoopMode(false) { kDebug() << "////////// USING PROFILE: " << (char*)KdenliveSettings::current_profile().toUtf8().data(); refreshTimer = new QTimer(this); connect(refreshTimer, SIGNAL(timeout()), this, SLOT(refresh())); - if (rendererName == "project") m_monitorId = 10000; - else m_monitorId = 10001; + /*if (rendererName == "project") m_monitorId = 10000; + else m_monitorId = 10001;*/ osdTimer = new QTimer(this); connect(osdTimer, SIGNAL(timeout()), this, SLOT(slotOsdTimeout())); @@ -201,8 +201,11 @@ /** Wraps the VEML command of the same name; Seeks the renderer clip to the given time. */ void Render::seek(GenTime time) { - sendSeekCommand(time); - //emit positionChanged(time); + if (!m_mltProducer) + return; + //kDebug()<<"////////// KDENLIVE SEEK: "<<(int) (time.frames(m_fps)); + m_mltProducer->seek((int)(time.frames(m_fps))); + refresh(); } //static @@ -942,6 +945,7 @@ m_isBlocked = true; if (m_mltProducer) { + if (m_isZoneMode) resetZoneMode(); m_mltProducer->set_speed(0.0); //m_mltProducer->set("out", m_mltProducer->get_length() - 1); //kDebug() << m_mltProducer->get_length(); @@ -953,6 +957,7 @@ kDebug() << "///////////// RENDER STOP-------2"; if (m_mltProducer) { + if (m_isZoneMode) resetZoneMode(); m_mltProducer->set_speed(0.0); m_mltProducer->seek((int) startTime.frames(m_fps)); } @@ -962,6 +967,7 @@ void Render::switchPlay() { if (!m_mltProducer || !m_mltConsumer) return; + if (m_isZoneMode) resetZoneMode(); if (m_mltProducer->get_speed() == 0.0) { //m_isBlocked = false; m_mltProducer->set_speed(1.0); @@ -1001,44 +1007,45 @@ refresh(); } -void Render::play(double speed, const GenTime & startTime) { - kDebug() << "///////////// RENDER PLAY2-------" << speed; - if (!m_mltProducer) +void Render::play(const GenTime & startTime) { + if (!m_mltProducer || !m_mltConsumer) return; - //m_mltProducer->set("out", m_mltProducer->get_length() - 1); - //if (speed == 0.0) m_mltConsumer->set("refresh", 0); - m_mltProducer->set_speed(speed); m_mltProducer->seek((int)(startTime.frames(m_fps))); - //m_mltConsumer->purge(); - //refresh(); + m_mltProducer->set_speed(1.0); + m_mltConsumer->set("refresh", 1); } -void Render::play(double speed, const GenTime & startTime, - const GenTime & stopTime) { - kDebug() << "///////////// RENDER PLAY3-------" << speed << stopTime.frames(m_fps); - if (!m_mltProducer) +void Render::loopZone(const GenTime & startTime, const GenTime & stopTime) { + if (!m_mltProducer || !m_mltConsumer) return; + //m_mltProducer->set("eof", "loop"); + m_isLoopMode = true; + m_loopStart = startTime; + playZone(startTime, stopTime); +} + +void Render::playZone(const GenTime & startTime, const GenTime & stopTime) { + if (!m_mltProducer || !m_mltConsumer) + return; m_mltProducer->set("out", stopTime.frames(m_fps)); m_mltProducer->seek((int)(startTime.frames(m_fps))); - m_mltConsumer->purge(); - m_mltProducer->set_speed(speed); - refresh(); + m_mltProducer->set_speed(1.0); + m_mltConsumer->set("refresh", 1); + m_isZoneMode = true; } - -void Render::sendSeekCommand(GenTime time) { - //kDebug()<<" ********* RENDER SEND SEEK"; - if (!m_mltProducer) - return; - //kDebug()<<"////////// KDENLIVE SEEK: "<<(int) (time.frames(m_fps)); - m_mltProducer->seek((int)(time.frames(m_fps))); - refresh(); +void Render::resetZoneMode() { + m_mltProducer->set("out", m_mltProducer->get_length() - 1); + //m_mltProducer->set("eof", "pause"); + m_isZoneMode = false; + m_isLoopMode = false; } void Render::seekToFrame(int pos) { //kDebug()<<" ********* RENDER SEEK TO POS"; if (!m_mltProducer) return; + resetZoneMode(); m_mltProducer->seek(pos); refresh(); } @@ -1062,17 +1069,6 @@ } } -/** Sets the description of this renderer to desc. */ -void Render::setDescription(const QString & description) { - m_description = description; -} - -/** Returns the description of this renderer */ -QString Render::description() { - return m_description; -} - - double Render::playSpeed() { if (m_mltProducer) return m_mltProducer->get_speed(); return 0.0; @@ -1099,6 +1095,8 @@ // This is used to know when the playing stopped if (m_mltProducer) { double pos = m_mltProducer->position(); + if (m_isLoopMode) play(m_loopStart); + else if (m_isZoneMode) resetZoneMode(); emit rendererStopped((int) pos); //if (qApp->activeWindow()) QApplication::postEvent(qApp->activeWindow(), new PositionChangeEvent(GenTime((int) pos, m_fps), m_monitorId + 100)); //new QCustomEvent(10002)); Modified: branches/KDE4/src/renderer.h =================================================================== --- branches/KDE4/src/renderer.h 2008-09-24 16:04:48 UTC (rev 2405) +++ branches/KDE4/src/renderer.h 2008-09-24 18:39:58 UTC (rev 2406) @@ -110,13 +110,10 @@ play the current scene at the speed specified, relative to normal playback. e.g. 1.0 is normal speed, 0.0 is paused, -1.0 means play backwards. Specifes the start/stop times for playback.*/ - void play(double speed, const GenTime & startTime); - void play(double speed, const GenTime & startTime, - const GenTime & stopTime); + void play(const GenTime & startTime); + void playZone(const GenTime & startTime, const GenTime & stopTime); + void loopZone(const GenTime & startTime, const GenTime & stopTime); - /** Returns the description of this renderer */ - QString description(); - /** Returns the name of the renderer. */ const QString & rendererName() const; @@ -188,7 +185,12 @@ Mlt::Profile *m_mltProfile; double m_framePosition; double m_fps; - uint m_monitorId; + + /** true if we are playing a zone (ie the in and out properties have been temporarily changed) */ + bool m_isZoneMode; + bool m_isLoopMode; + GenTime m_loopStart; + /** true when monitor is in split view (several tracks at the same time) */ bool m_isSplitView; @@ -199,22 +201,18 @@ QTimer *refreshTimer; QTimer *osdTimer; KUrl m_exportedFile; - int exportDuration, firstExportFrame, lastExportFrame; /** A human-readable description of this renderer. */ - QString m_description; int m_winid; int m_externalwinid; - /** The actually seek command, private so people can't avoid the buffering of multiple seek commands. */ - void sendSeekCommand(GenTime time); /** Sets the description of this renderer to desc. */ - void setDescription(const QString & description); void closeMlt(); void mltCheckLength(bool reload = true); QMap<QString, QString> mltGetTransitionParamsFromXml(QDomElement xml); QMap<QString, Mlt::Producer *> m_slowmotionProducers; void buildConsumer(); + void resetZoneMode(); private slots: // Private slots /** refresh monitor display */ Modified: branches/KDE4/src/smallruler.cpp =================================================================== --- branches/KDE4/src/smallruler.cpp 2008-09-24 16:04:48 UTC (rev 2405) +++ branches/KDE4/src/smallruler.cpp 2008-09-24 18:39:58 UTC (rev 2406) @@ -80,13 +80,20 @@ // virtual void SmallRuler::mousePressEvent(QMouseEvent * event) { const int pos = event->x() / m_scale; - emit seekRenderer((int) pos); + if (event->button() == Qt::RightButton) { + // Right button clicked, move selection zone + if (qAbs(pos - m_zoneStart) < qAbs(pos - m_zoneEnd)) m_zoneStart = pos; + else m_zoneEnd = pos; + emit zoneChanged(QPoint(m_zoneStart, m_zoneEnd)); + update(); + + } else emit seekRenderer((int) pos); } // virtual void SmallRuler::mouseMoveEvent(QMouseEvent * event) { const int pos = event->x() / m_scale; - emit seekRenderer((int) pos); + if (event->buttons() & Qt::LeftButton) emit seekRenderer((int) pos); } void SmallRuler::slotNewValue(int value) { Modified: branches/KDE4/src/smallruler.h =================================================================== --- branches/KDE4/src/smallruler.h 2008-09-24 16:04:48 UTC (rev 2405) +++ branches/KDE4/src/smallruler.h 2008-09-24 18:39:58 UTC (rev 2406) @@ -53,6 +53,7 @@ signals: void seekRenderer(int); + void zoneChanged(QPoint); }; #endif This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <j-...@us...> - 2008-09-24 23:12:08
|
Revision: 2408 http://kdenlive.svn.sourceforge.net/kdenlive/?rev=2408&view=rev Author: j-b-m Date: 2008-09-24 23:11:58 +0000 (Wed, 24 Sep 2008) Log Message: ----------- new: save clip part as westley playlist Modified Paths: -------------- branches/KDE4/src/mainwindow.cpp branches/KDE4/src/mainwindow.h branches/KDE4/src/monitor.cpp branches/KDE4/src/monitor.h branches/KDE4/src/renderer.cpp branches/KDE4/src/renderer.h Modified: branches/KDE4/src/mainwindow.cpp =================================================================== --- branches/KDE4/src/mainwindow.cpp 2008-09-24 19:30:33 UTC (rev 2407) +++ branches/KDE4/src/mainwindow.cpp 2008-09-24 23:11:58 UTC (rev 2408) @@ -429,6 +429,9 @@ connect(m_clipMonitor, SIGNAL(adjustMonitorSize()), this, SLOT(slotAdjustClipMonitor())); connect(m_projectMonitor, SIGNAL(adjustMonitorSize()), this, SLOT(slotAdjustProjectMonitor())); + + connect(m_clipMonitor, SIGNAL(saveZone(Render *, QPoint)), this, SLOT(slotSaveZone(Render *, QPoint))); + connect(m_projectMonitor, SIGNAL(saveZone(Render *, QPoint)), this, SLOT(slotSaveZone(Render *, QPoint))); } void MainWindow::slotAdjustClipMonitor() { @@ -1566,4 +1569,29 @@ } } +void MainWindow::slotSaveZone(Render *render, QPoint zone) { + KDialog *dialog = new KDialog(this); + dialog->setCaption("Save clip zone"); + dialog->setButtons(KDialog::Ok | KDialog::Cancel); + + QWidget *widget = new QWidget(dialog); + dialog->setMainWidget(widget); + + QVBoxLayout *vbox = new QVBoxLayout(widget); + QLabel *label1 = new QLabel(i18n("Save clip zone as:"), this); + QString path = m_activeDocument->projectFolder().path(); + path.append("/"); + path.append("untitled.westley"); + KUrlRequester *url = new KUrlRequester(KUrl(path), this); + url->setFilter("video/mlt-playlist"); + QLabel *label2 = new QLabel(i18n("Description:"), this); + KLineEdit *edit = new KLineEdit(this); + vbox->addWidget(label1); + vbox->addWidget(url); + vbox->addWidget(label2); + vbox->addWidget(edit); + if (dialog->exec() == QDialog::Accepted) render->saveZone(url->url(), edit->text(), zone); + +} + #include "mainwindow.moc" Modified: branches/KDE4/src/mainwindow.h =================================================================== --- branches/KDE4/src/mainwindow.h 2008-09-24 19:30:33 UTC (rev 2407) +++ branches/KDE4/src/mainwindow.h 2008-09-24 23:11:58 UTC (rev 2408) @@ -55,6 +55,7 @@ class RenderWidget; class JogShuttle; class DocClipBase; +class Render; class MainWindow : public KXmlGuiWindow { Q_OBJECT @@ -237,6 +238,7 @@ void slotAdjustClipMonitor(); void slotAdjustProjectMonitor(); + void slotSaveZone(Render *render, QPoint zone); }; Modified: branches/KDE4/src/monitor.cpp =================================================================== --- branches/KDE4/src/monitor.cpp 2008-09-24 19:30:33 UTC (rev 2407) +++ branches/KDE4/src/monitor.cpp 2008-09-24 23:11:58 UTC (rev 2408) @@ -109,25 +109,33 @@ m_contextMenu = new QMenu(this); m_contextMenu->addMenu(playMenu); - QMenu *goMenu = new QMenu(i18n("Go to..."), this); goMenu->addAction(i18n("Start"), this, SLOT(slotStart())); goMenu->addAction(i18n("End"), this, SLOT(slotEnd())); goMenu->addAction(i18n("Zone start"), this, SLOT(slotZoneStart())); goMenu->addAction(i18n("Zone end"), this, SLOT(slotZoneEnd())); - m_contextMenu->addMenu(goMenu); - m_contextMenu->addAction(zoneStart); - m_contextMenu->addAction(zoneEnd); - - QAction *extractFrame = m_contextMenu->addAction(KIcon("document-new"), i18n("Extract frame"), this, SLOT(slotExtractCurrentFrame())); connect(m_ruler, SIGNAL(seekRenderer(int)), this, SLOT(slotSeek(int))); connect(m_ruler, SIGNAL(zoneChanged(QPoint)), this, SIGNAL(zoneUpdated(QPoint))); connect(render, SIGNAL(durationChanged(int)), this, SLOT(adjustRulerSize(int))); connect(render, SIGNAL(rendererPosition(int)), this, SLOT(seekCursor(int))); connect(render, SIGNAL(rendererStopped(int)), this, SLOT(rendererStopped(int))); + configMenu->addSeparator(); + configMenu->addAction(KIcon("transform-scale"), i18n("Resize (100%)"), this, SLOT(slotSetSizeOneToOne())); + configMenu->addAction(KIcon("transform-scale"), i18n("Resize (50%)"), this, SLOT(slotSetSizeOneToTwo())); + //render->createVideoXWindow(ui.video_frame->winId(), -1); + m_length = 0; + + m_contextMenu->addMenu(goMenu); + m_contextMenu->addAction(zoneStart); + m_contextMenu->addAction(zoneEnd); + //TODO: add save zone to timeline monitor when fixed + if (name == "clip") m_contextMenu->addAction(KIcon("document-save"), i18n("Save zone"), this, SLOT(slotSaveZone())); + + QAction *extractFrame = m_contextMenu->addAction(KIcon("document-new"), i18n("Extract frame"), this, SLOT(slotExtractCurrentFrame())); configMenu->addAction(extractFrame); + if (name != "clip") { connect(render, SIGNAL(rendererPosition(int)), this, SIGNAL(renderPosition(int))); connect(render, SIGNAL(durationChanged(int)), this, SIGNAL(durationChanged(int))); @@ -138,11 +146,7 @@ QAction *setThumbFrame = m_contextMenu->addAction(KIcon("document-new"), i18n("Set current image as thumbnail"), this, SLOT(slotSetThumbFrame())); configMenu->addAction(setThumbFrame); } - configMenu->addSeparator(); - configMenu->addAction(KIcon("transform-scale"), i18n("Resize (100%)"), this, SLOT(slotSetSizeOneToOne())); - configMenu->addAction(KIcon("transform-scale"), i18n("Resize (50%)"), this, SLOT(slotSetSizeOneToTwo())); - //render->createVideoXWindow(ui.video_frame->winId(), -1); - m_length = 0; + m_monitorRefresh->show(); kDebug() << "/////// BUILDING MONITOR, ID: " << ui.video_frame->winId(); } @@ -508,6 +512,14 @@ render->setSceneList(doc, 0); } +void Monitor::slotSaveZone() { + if (render == NULL) return; + emit saveZone(render, m_ruler->zone()); + + //render->setSceneList(doc, 0); +} + + void Monitor::resetProfile() { if (render == NULL) return; render->resetProfile(); Modified: branches/KDE4/src/monitor.h =================================================================== --- branches/KDE4/src/monitor.h 2008-09-24 19:30:33 UTC (rev 2407) +++ branches/KDE4/src/monitor.h 2008-09-24 23:11:58 UTC (rev 2408) @@ -94,6 +94,7 @@ void slotSetSizeOneToTwo(); void slotSetZoneStart(); void slotSetZoneEnd(); + void slotSaveZone(); public slots: void slotOpenFile(const QString &); @@ -124,6 +125,7 @@ void refreshClipThumbnail(const QString &); void adjustMonitorSize(); void zoneUpdated(QPoint); + void saveZone(Render *, QPoint); }; #endif Modified: branches/KDE4/src/renderer.cpp =================================================================== --- branches/KDE4/src/renderer.cpp 2008-09-24 19:30:33 UTC (rev 2407) +++ branches/KDE4/src/renderer.cpp 2008-09-24 23:11:58 UTC (rev 2408) @@ -803,7 +803,6 @@ if (split) slotSplitView(false); westleyConsumer.connect(prod); //prod.set("title", "kdenlive document"); - //westleyConsumer.listen("consumer-frame-show", this, (mlt_listener) consumer_frame_show); westleyConsumer.start(); while (!westleyConsumer.is_stopped()) {} if (!kdenliveData.isNull()) { @@ -826,6 +825,38 @@ } +void Render::saveZone(KUrl url, QString desc, QPoint zone) { + kDebug() << "// SAVING CLIP ZONE, RENDER: " << m_name; + char *tmppath = decodedString("westley:" + url.path()); + Mlt::Consumer westleyConsumer(*m_mltProfile , tmppath); + m_mltProducer->optimise(); + delete[] tmppath; + westleyConsumer.set("terminate_on_pause", 1); + if (m_name == "clip") { + Mlt::Producer *prod = m_mltProducer->cut(zone.x(), zone.y()); + tmppath = decodedString(desc); + Mlt::Playlist list; + list.insert_at(0, prod, 0); + list.set("title", tmppath); + delete[] tmppath; + westleyConsumer.connect(list); + + } else { + //TODO: not working yet, save zone from timeline + Mlt::Producer *p1 = new Mlt::Producer(m_mltProducer->get_producer()); + /* Mlt::Service service(p1->parent().get_service()); + if (service.type() != tractor_type) kWarning() << "// TRACTOR PROBLEM";*/ + + //Mlt::Producer *prod = p1->cut(zone.x(), zone.y()); + tmppath = decodedString(desc); + //prod->set("title", tmppath); + delete[] tmppath; + westleyConsumer.connect(*p1); //list); + } + + westleyConsumer.start(); +} + const double Render::fps() const { return m_fps; } @@ -2271,7 +2302,6 @@ fileConsumer.connect(service); fileConsumer.start(); - } #include "renderer.moc" Modified: branches/KDE4/src/renderer.h =================================================================== --- branches/KDE4/src/renderer.h 2008-09-24 19:30:33 UTC (rev 2407) +++ branches/KDE4/src/renderer.h 2008-09-24 23:11:58 UTC (rev 2408) @@ -114,6 +114,8 @@ void playZone(const GenTime & startTime, const GenTime & stopTime); void loopZone(const GenTime & startTime, const GenTime & stopTime); + void saveZone(KUrl url, QString desc, QPoint zone); + /** Returns the name of the renderer. */ const QString & rendererName() const; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <j-...@us...> - 2008-09-25 12:08:15
|
Revision: 2409 http://kdenlive.svn.sourceforge.net/kdenlive/?rev=2409&view=rev Author: j-b-m Date: 2008-09-25 11:46:01 +0000 (Thu, 25 Sep 2008) Log Message: ----------- Check that MLT's avformat is ok at first start, it should help detect startup crashes caused by MLT. Modified Paths: -------------- branches/KDE4/src/mainwindow.cpp branches/KDE4/src/wizard.cpp branches/KDE4/src/wizard.h Modified: branches/KDE4/src/mainwindow.cpp =================================================================== --- branches/KDE4/src/mainwindow.cpp 2008-09-24 23:11:58 UTC (rev 2408) +++ branches/KDE4/src/mainwindow.cpp 2008-09-25 11:46:01 UTC (rev 2409) @@ -769,11 +769,15 @@ if (!initialGroup.exists()) { // this is our first run, show Wizard Wizard *w = new Wizard(this); - if (w->exec() == QDialog::Accepted) { + if (w->exec() == QDialog::Accepted && w->isOk()) { w->adjustSettings(); initialGroup.writeEntry("version", "0.7"); + delete w; + } else { + delete w; + // TODO: find a better way to exit application faster + QTimer::singleShot(1000, this, SLOT(queryQuit())); } - delete w; } } @@ -978,7 +982,7 @@ if (KdenliveSettings::rendererpath().isEmpty()) { // Cannot find the MLT inigo renderer, ask for location - KUrlRequesterDialog *getUrl = new KUrlRequesterDialog(KdenliveSettings::mltpath(), i18n("Cannot find the inigo program required for rendering (part of Mlt)"), this); + KUrlRequesterDialog *getUrl = new KUrlRequesterDialog(QString(), i18n("Cannot find the inigo program required for rendering (part of Mlt)"), this); getUrl->exec(); KUrl rendererPath = getUrl->selectedUrl(); delete getUrl; Modified: branches/KDE4/src/wizard.cpp =================================================================== --- branches/KDE4/src/wizard.cpp 2008-09-24 23:11:58 UTC (rev 2408) +++ branches/KDE4/src/wizard.cpp 2008-09-25 11:46:01 UTC (rev 2409) @@ -18,9 +18,10 @@ ***************************************************************************/ #include <QLabel> -#include <QVBoxLayout> #include <QFile> #include <QXmlStreamWriter> +#include <QApplication> +#include <QTimer> #include <KStandardDirs> #include <KLocale> @@ -36,15 +37,15 @@ QWizardPage *page1 = new QWizardPage; page1->setTitle("Welcome"); - QLabel *label = new QLabel("This is the first time you run Kdenlive. This wizard will let you adjust some basic settings, you will be ready to edit your first movie in a few seconds..."); + QLabel *label = new QLabel(i18n("This is the first time you run Kdenlive. This wizard will let you adjust some basic settings, you will be ready to edit your first movie in a few seconds...")); label->setWordWrap(true); - QVBoxLayout *layout = new QVBoxLayout; - layout->addWidget(label); - page1->setLayout(layout); + m_startLayout = new QVBoxLayout; + m_startLayout->addWidget(label); + page1->setLayout(m_startLayout); addPage(page1); QWizardPage *page2 = new QWizardPage; - page2->setTitle("Video Standard"); + page2->setTitle(i18n("Video Standard")); m_standard.setupUi(page2); m_standard.profiles_list->setMaximumHeight(100); connect(m_standard.button_pal, SIGNAL(toggled(bool)), this, SLOT(slotCheckStandard())); @@ -54,7 +55,7 @@ addPage(page2); QWizardPage *page3 = new QWizardPage; - page3->setTitle("Additional Settings"); + page3->setTitle(i18n("Additional Settings")); m_extra.setupUi(page3); m_extra.videothumbs->setChecked(KdenliveSettings::videothumbnails()); m_extra.audiothumbs->setChecked(KdenliveSettings::audiothumbnails()); @@ -63,6 +64,7 @@ connect(m_extra.audiothumbs, SIGNAL(stateChanged(int)), this, SLOT(slotCheckThumbs())); slotCheckThumbs(); addPage(page3); + QTimer::singleShot(500, this, SLOT(slotCheckMlt())); } void Wizard::installExtraMimes(QString baseName, QStringList globs) { @@ -115,7 +117,7 @@ void Wizard::runUpdateMimeDatabase() { const QString localPackageDir = KStandardDirs::locateLocal("xdgdata-mime", QString()); - Q_ASSERT(!localPackageDir.isEmpty()); + //Q_ASSERT(!localPackageDir.isEmpty()); KProcess proc; proc << "update-mime-database"; proc << localPackageDir; @@ -188,4 +190,36 @@ } } +void Wizard::slotCheckMlt() { + QString errorMessage; + if (KdenliveSettings::rendererpath().isEmpty()) { + errorMessage.append(i18n("your MLT installation cannot be found. Install MLT and restart Kdenlive.\n")); + } + QProcess checkProcess; + checkProcess.start(KdenliveSettings::rendererpath(), QStringList() << "-query" << "producer"); + if (!checkProcess.waitForStarted()) + errorMessage.append("Error starting MLT's command line player (inigo).\n"); + + checkProcess.waitForFinished(); + + QByteArray result = checkProcess.readAllStandardError(); + if (!result.contains("avformat")) errorMessage.append(i18n("MLT's avformat (FFMPEG) module not found. Please check your FFMPEG and MLT install. Kdenlive will not work until this issue is fixed.\n")); + + if (!errorMessage.isEmpty()) { + QLabel *pix = new QLabel(); + pix->setPixmap(KIcon("process-stop").pixmap(30)); + QLabel *label = new QLabel(errorMessage); + label->setWordWrap(true); + m_startLayout->addSpacing(40); + m_startLayout->addWidget(pix); + m_startLayout->addWidget(label); + m_systemCheckIsOk = false; + button(QWizard::NextButton)->setEnabled(false); + } else m_systemCheckIsOk = true; +} + +bool Wizard::isOk() const { + return m_systemCheckIsOk; +} + #include "wizard.moc" Modified: branches/KDE4/src/wizard.h =================================================================== --- branches/KDE4/src/wizard.h 2008-09-24 23:11:58 UTC (rev 2408) +++ branches/KDE4/src/wizard.h 2008-09-25 11:46:01 UTC (rev 2409) @@ -22,6 +22,7 @@ #define WIZARD_H #include <QWizard> +#include <QVBoxLayout> #include <KDebug> #include "ui_wizardstandard_ui.h" @@ -35,15 +36,19 @@ void installExtraMimes(QString baseName, QStringList globs); void runUpdateMimeDatabase(); void adjustSettings(); + bool isOk() const; private: Ui::WizardStandard_UI m_standard; Ui::WizardExtra_UI m_extra; + QVBoxLayout *m_startLayout; + bool m_systemCheckIsOk; private slots: void slotCheckThumbs(); void slotCheckStandard(); void slotCheckSelectedItem(); + void slotCheckMlt(); }; #endif This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <j-...@us...> - 2008-09-25 16:23:41
|
Revision: 2412 http://kdenlive.svn.sourceforge.net/kdenlive/?rev=2412&view=rev Author: j-b-m Date: 2008-09-25 16:23:37 +0000 (Thu, 25 Sep 2008) Log Message: ----------- minor fixes Modified Paths: -------------- branches/KDE4/src/clipproperties.cpp branches/KDE4/src/kthumb.cpp branches/KDE4/src/projectitem.cpp branches/KDE4/src/renderer.cpp branches/KDE4/src/wizard.cpp Modified: branches/KDE4/src/clipproperties.cpp =================================================================== --- branches/KDE4/src/clipproperties.cpp 2008-09-25 16:21:13 UTC (rev 2411) +++ branches/KDE4/src/clipproperties.cpp 2008-09-25 16:23:37 UTC (rev 2412) @@ -48,6 +48,8 @@ m_view.clip_path->setText(url.path()); m_view.clip_description->setText(m_clip->description()); QMap <QString, QString> props = m_clip->properties(); + // disable advanced properties until implemented + m_view.tabWidget->widget(ADVANCEDTAB)->setEnabled(false); if (props.contains("audiocodec")) m_view.clip_acodec->setText(props.value("audiocodec")); Modified: branches/KDE4/src/kthumb.cpp =================================================================== --- branches/KDE4/src/kthumb.cpp 2008-09-25 16:21:13 UTC (rev 2411) +++ branches/KDE4/src/kthumb.cpp 2008-09-25 16:23:37 UTC (rev 2412) @@ -324,6 +324,7 @@ p.fill(Qt::red); return p; } + mlt_image_format format = mlt_image_yuv422; int frame_width = 0; int frame_height = 0; @@ -337,7 +338,7 @@ QImage image((uchar *)new_image, frame_width, frame_height, QImage::Format_ARGB32); if (!image.isNull()) { - pix = pix.fromImage(image.rgbSwapped()); + pix = QPixmap::fromImage(image.rgbSwapped()); } else pix.fill(Qt::red); Modified: branches/KDE4/src/projectitem.cpp =================================================================== --- branches/KDE4/src/projectitem.cpp 2008-09-25 16:21:13 UTC (rev 2411) +++ branches/KDE4/src/projectitem.cpp 2008-09-25 16:23:37 UTC (rev 2412) @@ -211,16 +211,15 @@ if ((m_clipType == AV || m_clipType == AUDIO) && KdenliveSettings::audiothumbnails()) m_clip->slotRequestAudioThumbs(); m_clip->setProperties(attributes); - /* - m_metadata = metadata; - if (m_metadata.contains("description")) { - setDescription (m_metadata["description"]); - } - else if (m_metadata.contains("comment")) { - setDescription (m_metadata["comment"]); - } - */ - + if (m_clip->description().isEmpty()) { + if (metadata.contains("description")) { + m_clip->setProperty("description", metadata["description"]); + setText(2, m_clip->description()); + } else if (metadata.contains("comment")) { + m_clip->setProperty("description", metadata["comment"]); + setText(2, m_clip->description()); + } + } } Modified: branches/KDE4/src/renderer.cpp =================================================================== --- branches/KDE4/src/renderer.cpp 2008-09-25 16:21:13 UTC (rev 2411) +++ branches/KDE4/src/renderer.cpp 2008-09-25 16:23:37 UTC (rev 2412) @@ -561,7 +561,7 @@ QImage image((uchar *)new_image, frame_width, frame_height, QImage::Format_ARGB32); if (!image.isNull()) { - pix = pix.fromImage(image.rgbSwapped()); + pix = QPixmap::fromImage(image.rgbSwapped()); } else pix.fill(Qt::black); Modified: branches/KDE4/src/wizard.cpp =================================================================== --- branches/KDE4/src/wizard.cpp 2008-09-25 16:21:13 UTC (rev 2411) +++ branches/KDE4/src/wizard.cpp 2008-09-25 16:23:37 UTC (rev 2412) @@ -216,8 +216,9 @@ if (!result.contains("sdl") || !result.contains("sdl_preview")) errorMessage.append(i18n("MLT's SDL module not found. Please check your MLT install. Kdenlive will not work until this issue is fixed.\n")); if (!errorMessage.isEmpty()) { + errorMessage.prepend(QString("<b>%1</b><br>").arg(i18n("Fatal Error"))); QLabel *pix = new QLabel(); - pix->setPixmap(KIcon("process-stop").pixmap(30)); + pix->setPixmap(KIcon("dialog-error").pixmap(30)); QLabel *label = new QLabel(errorMessage); label->setWordWrap(true); m_startLayout->addSpacing(40); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <j-...@us...> - 2008-09-25 22:06:01
|
Revision: 2413 http://kdenlive.svn.sourceforge.net/kdenlive/?rev=2413&view=rev Author: j-b-m Date: 2008-09-25 22:05:52 +0000 (Thu, 25 Sep 2008) Log Message: ----------- Add render zone between guides Modified Paths: -------------- branches/KDE4/src/customtrackview.cpp branches/KDE4/src/kdenlivedoc.cpp branches/KDE4/src/kdenlivedoc.h branches/KDE4/src/mainwindow.cpp branches/KDE4/src/mainwindow.h branches/KDE4/src/renderwidget.cpp branches/KDE4/src/renderwidget.h branches/KDE4/src/widgets/renderwidget_ui.ui Modified: branches/KDE4/src/customtrackview.cpp =================================================================== --- branches/KDE4/src/customtrackview.cpp 2008-09-25 16:23:37 UTC (rev 2412) +++ branches/KDE4/src/customtrackview.cpp 2008-09-25 22:05:52 UTC (rev 2413) @@ -1864,8 +1864,10 @@ viewport()->update(); } +bool sortGuidesList(const Guide *g1 , const Guide *g2) { + return (*g1).position() < (*g2).position(); +} - void CustomTrackView::editGuide(const GenTime oldPos, const GenTime pos, const QString &comment) { if (oldPos > GenTime() && pos > GenTime()) { // move guide @@ -1890,6 +1892,7 @@ } if (!found) emit displayMessage(i18n("No guide at cursor time"), ErrorMessage); } + qSort(m_guides.begin(), m_guides.end(), sortGuidesList); m_document->syncGuides(m_guides); } @@ -1903,6 +1906,7 @@ Guide *g = new Guide(this, pos, comment, m_document->fps(), m_tracksHeight * m_scene->m_tracksList.count()); scene()->addItem(g); m_guides.append(g); + qSort(m_guides.begin(), m_guides.end(), sortGuidesList); m_document->syncGuides(m_guides); return true; } Modified: branches/KDE4/src/kdenlivedoc.cpp =================================================================== --- branches/KDE4/src/kdenlivedoc.cpp 2008-09-25 16:23:37 UTC (rev 2412) +++ branches/KDE4/src/kdenlivedoc.cpp 2008-09-25 22:05:52 UTC (rev 2413) @@ -231,14 +231,20 @@ QDomElement e; m_guidesXml.clear(); m_guidesXml = doc.createElement("guides"); + for (int i = 0; i < guides.count(); i++) { e = doc.createElement("guide"); e.setAttribute("time", guides.at(i)->position().ms() / 1000); e.setAttribute("comment", guides.at(i)->label()); m_guidesXml.appendChild(e); } + emit guidesUpdated(); } +QDomElement KdenliveDoc::guidesXml() const { + return m_guidesXml; +} + void KdenliveDoc::slotAutoSave() { if (m_render) { if (!m_autosave->isOpen() && !m_autosave->open(QIODevice::ReadWrite)) { @@ -628,6 +634,10 @@ if (m_render) m_scenelist = m_render->sceneList(); } +double KdenliveDoc::projectDuration() const { + if (m_render) return GenTime(m_render->getLength(), m_fps).ms() / 1000; +} + double KdenliveDoc::fps() const { return m_fps; } Modified: branches/KDE4/src/kdenlivedoc.h =================================================================== --- branches/KDE4/src/kdenlivedoc.h 2008-09-25 16:23:37 UTC (rev 2412) +++ branches/KDE4/src/kdenlivedoc.h 2008-09-25 22:05:52 UTC (rev 2413) @@ -64,6 +64,7 @@ int getProducerDuration(const QString &id); Render *renderer(); QDomElement m_guidesXml; + QDomElement guidesXml() const; ClipManager *clipManager(); void addClip(const QDomElement &elem, const QString &clipId); void addFolder(const QString foldername, const QString &clipId, bool edit); @@ -103,6 +104,7 @@ void setZoom(int factor); int zoom() const; const double dar(); + double projectDuration() const; private: KUrl m_url; @@ -149,6 +151,7 @@ /** emited when the document state has been modified (= needs saving or not) */ void docModified(bool); void selectLastAddedClip(const QString &); + void guidesUpdated(); }; #endif Modified: branches/KDE4/src/mainwindow.cpp =================================================================== --- branches/KDE4/src/mainwindow.cpp 2008-09-25 16:23:37 UTC (rev 2412) +++ branches/KDE4/src/mainwindow.cpp 2008-09-25 22:05:52 UTC (rev 2413) @@ -1024,7 +1024,8 @@ void MainWindow::slotRenderProject() { if (!m_renderWidget) { m_renderWidget = new RenderWidget(this); - connect(m_renderWidget, SIGNAL(doRender(const QString&, const QString&, const QStringList &, const QStringList &, bool, bool)), this, SLOT(slotDoRender(const QString&, const QString&, const QStringList &, const QStringList &, bool, bool))); + connect(m_renderWidget, SIGNAL(doRender(const QString&, const QString&, const QStringList &, const QStringList &, bool, bool, double, double)), this, SLOT(slotDoRender(const QString&, const QString&, const QStringList &, const QStringList &, bool, bool, double, double))); + if (m_activeDocument) m_renderWidget->setGuides(m_activeDocument->guidesXml(), m_activeDocument->projectDuration()); } /*TrackView *currentTab = (TrackView *) m_timelineArea->currentWidget(); if (currentTab) m_renderWidget->setTimeline(currentTab); @@ -1032,7 +1033,7 @@ m_renderWidget->show(); } -void MainWindow::slotDoRender(const QString &dest, const QString &render, const QStringList &overlay_args, const QStringList &avformat_args, bool zoneOnly, bool playAfter) { +void MainWindow::slotDoRender(const QString &dest, const QString &render, const QStringList &overlay_args, const QStringList &avformat_args, bool zoneOnly, bool playAfter, double guideStart, double guideEnd) { if (dest.isEmpty()) return; int in; int out; @@ -1049,6 +1050,9 @@ QStringList args; args << "-erase"; if (zoneOnly) args << "in=" + QString::number(in) << "out=" + QString::number(out); + else if (guideStart != -1) { + args << "in=" + QString::number(GenTime(guideStart).frames(m_activeDocument->fps())) << "out=" + QString::number(GenTime(guideEnd).frames(m_activeDocument->fps())); + } if (!overlay_args.isEmpty()) args << "preargs=" + overlay_args.join(" "); QString videoPlayer = "-"; if (playAfter) { @@ -1103,6 +1107,7 @@ disconnect(m_projectMonitor, SIGNAL(zoneUpdated(QPoint)), trackView, SLOT(slotSetZone(QPoint))); disconnect(m_projectMonitor, SIGNAL(durationChanged(int)), m_activeTimeline, SLOT(setDuration(int))); disconnect(m_projectList, SIGNAL(projectModified()), m_activeDocument, SLOT(setModified())); + disconnect(m_activeDocument, SIGNAL(guidesUpdated()), this, SLOT(slotGuidesUpdated())); disconnect(m_activeDocument, SIGNAL(addProjectClip(DocClipBase *)), m_projectList, SLOT(slotAddClip(DocClipBase *))); disconnect(m_activeDocument, SIGNAL(addProjectFolder(const QString, const QString &, bool, bool)), m_projectList, SLOT(slotAddFolder(const QString, const QString &, bool, bool))); disconnect(m_activeDocument, SIGNAL(signalDeleteProjectClip(const QString &)), m_projectList, SLOT(slotDeleteClip(const QString &))); @@ -1154,9 +1159,9 @@ connect(doc, SIGNAL(deleteTimelineClip(const QString &)), trackView, SLOT(slotDeleteClip(const QString &))); connect(doc, SIGNAL(docModified(bool)), this, SLOT(slotUpdateDocumentState(bool))); + connect(doc, SIGNAL(guidesUpdated()), this, SLOT(slotGuidesUpdated())); - connect(trackView, SIGNAL(clipItemSelected(ClipItem*)), effectStack, SLOT(slotClipItemSelected(ClipItem*))); connect(trackView, SIGNAL(clipItemSelected(ClipItem*)), this, SLOT(slotActivateEffectStackView())); connect(trackView, SIGNAL(transitionItemSelected(Transition*)), transitionConfig, SLOT(slotTransitionItemSelected(Transition*))); @@ -1200,6 +1205,10 @@ m_activeDocument = doc; } +void MainWindow::slotGuidesUpdated() { + if (m_renderWidget) m_renderWidget->setGuides(m_activeDocument->guidesXml(), m_activeDocument->projectDuration()); +} + void MainWindow::slotPreferences(int page, int option) { //An instance of your dialog could be already created and could be // cached, in which case you want to display the cached dialog Modified: branches/KDE4/src/mainwindow.h =================================================================== --- branches/KDE4/src/mainwindow.h 2008-09-25 16:23:37 UTC (rev 2412) +++ branches/KDE4/src/mainwindow.h 2008-09-25 22:05:52 UTC (rev 2413) @@ -193,7 +193,7 @@ void slotSwitchMarkersComments(); void slotSwitchSnap(); void slotRenderProject(); - void slotDoRender(const QString &dest, const QString &render, const QStringList &overlay_args, const QStringList &avformat_args, bool zoneOnly, bool playAfter); + void slotDoRender(const QString &dest, const QString &render, const QStringList &overlay_args, const QStringList &avformat_args, bool zoneOnly, bool playAfter, double guideStart, double guideEnd); void slotFullScreen(); void slotUpdateDocumentState(bool modified); void slotZoomIn(); @@ -229,6 +229,7 @@ void slotEditGuide(); void slotDeleteGuide(); void slotDeleteAllGuides(); + void slotGuidesUpdated(); void slotCopy(); void slotPaste(); Modified: branches/KDE4/src/renderwidget.cpp =================================================================== --- branches/KDE4/src/renderwidget.cpp 2008-09-25 16:23:37 UTC (rev 2412) +++ branches/KDE4/src/renderwidget.cpp 2008-09-25 22:05:52 UTC (rev 2413) @@ -57,10 +57,52 @@ connect(m_view.format_list, SIGNAL(currentRowChanged(int)), this, SLOT(refreshView())); connect(m_view.size_list, SIGNAL(currentRowChanged(int)), this, SLOT(refreshParams())); + connect(m_view.render_guide, SIGNAL(clicked(bool)), this, SLOT(slotUpdateGuideBox())); + connect(m_view.render_zone, SIGNAL(clicked(bool)), this, SLOT(slotUpdateGuideBox())); + connect(m_view.render_full, SIGNAL(clicked(bool)), this, SLOT(slotUpdateGuideBox())); + + connect(m_view.guide_end, SIGNAL(activated(int)), this, SLOT(slotCheckStartGuidePosition())); + connect(m_view.guide_start, SIGNAL(activated(int)), this, SLOT(slotCheckEndGuidePosition())); + + m_view.buttonStart->setEnabled(false); + m_view.guides_box->setVisible(false); parseProfiles(); } +void RenderWidget::slotUpdateGuideBox() { + m_view.guides_box->setVisible(m_view.render_guide->isChecked()); +} + +void RenderWidget::slotCheckStartGuidePosition() { + if (m_view.guide_start->currentIndex() > m_view.guide_end->currentIndex()) + m_view.guide_start->setCurrentIndex(m_view.guide_end->currentIndex()); +} + +void RenderWidget::slotCheckEndGuidePosition() { + if (m_view.guide_end->currentIndex() < m_view.guide_start->currentIndex()) + m_view.guide_end->setCurrentIndex(m_view.guide_start->currentIndex()); +} + +void RenderWidget::setGuides(QDomElement guidesxml, double duration) { + m_view.guide_start->clear(); + m_view.guide_end->clear(); + QDomNodeList nodes = guidesxml.elementsByTagName("guide"); + if (nodes.count() > 0) { + m_view.guide_start->addItem(i18n("Start"), "0"); + m_view.render_guide->setEnabled(true); + } else m_view.render_guide->setEnabled(false); + for (int i = 0; i < nodes.count(); i++) { + QDomElement e = nodes.item(i).toElement(); + if (!e.isNull()) { + m_view.guide_start->addItem(e.attribute("comment"), e.attribute("time").toDouble()); + m_view.guide_end->addItem(e.attribute("comment"), e.attribute("time").toDouble()); + } + } + if (nodes.count() > 0) + m_view.guide_end->addItem(i18n("End"), QString::number(duration)); +} + void RenderWidget::slotUpdateButtons() { if (m_view.out_file->url().isEmpty()) m_view.buttonStart->setEnabled(false); else m_view.buttonStart->setEnabled(true); @@ -275,7 +317,13 @@ overlayargs << "-attach" << "data_feed:attr_check" << "-attach"; overlayargs << "data_show:" + filterFile << "_fezzik=1" << "dynamic=1"; } - emit doRender(m_view.out_file->url().path(), item->data(RenderRole).toString(), overlayargs, m_view.advanced_params->text().split(' '), m_view.zone_only->isChecked(), m_view.play_after->isChecked()); + double startPos = -1; + double endPos = -1; + if (m_view.render_guide->isChecked()) { + startPos = m_view.guide_start->itemData(m_view.guide_start->currentIndex()).toDouble(); + endPos = m_view.guide_end->itemData(m_view.guide_end->currentIndex()).toDouble(); + } + emit doRender(m_view.out_file->url().path(), item->data(RenderRole).toString(), overlayargs, m_view.advanced_params->text().split(' '), m_view.render_zone->isChecked(), m_view.play_after->isChecked(), startPos, endPos); } void RenderWidget::setDocumentStandard(QString std) { Modified: branches/KDE4/src/renderwidget.h =================================================================== --- branches/KDE4/src/renderwidget.h 2008-09-25 16:23:37 UTC (rev 2412) +++ branches/KDE4/src/renderwidget.h 2008-09-25 22:05:52 UTC (rev 2413) @@ -32,6 +32,7 @@ public: RenderWidget(QWidget * parent = 0); void setDocumentStandard(QString std); + void setGuides(QDomElement guidesxml, double duration); private slots: void slotUpdateButtons(); @@ -41,7 +42,11 @@ void slotSaveProfile(); void slotEditProfile(); void slotDeleteProfile(); + void slotUpdateGuideBox(); + void slotCheckStartGuidePosition(); + void slotCheckEndGuidePosition(); + private: Ui::RenderWidget_UI m_view; QString m_standard; @@ -49,7 +54,7 @@ void parseFile(QString exportFile, bool editable); signals: - void doRender(const QString&, const QString&, const QStringList &, const QStringList &, bool, bool); + void doRender(const QString&, const QString&, const QStringList &, const QStringList &, bool, bool, double, double); }; Modified: branches/KDE4/src/widgets/renderwidget_ui.ui =================================================================== --- branches/KDE4/src/widgets/renderwidget_ui.ui 2008-09-25 16:23:37 UTC (rev 2412) +++ branches/KDE4/src/widgets/renderwidget_ui.ui 2008-09-25 22:05:52 UTC (rev 2413) @@ -5,8 +5,8 @@ <rect> <x>0</x> <y>0</y> - <width>340</width> - <height>339</height> + <width>424</width> + <height>381</height> </rect> </property> <property name="windowTitle" > @@ -20,54 +20,10 @@ </property> </widget> </item> - <item row="0" column="1" colspan="3" > + <item row="0" column="1" colspan="2" > <widget class="KUrlRequester" name="out_file" /> </item> - <item row="2" column="0" colspan="3" > - <widget class="QCheckBox" name="zone_only" > - <property name="text" > - <string>Selected zone only</string> - </property> - </widget> - </item> - <item row="2" column="3" > - <widget class="QCheckBox" name="play_after" > - <property name="text" > - <string>Play after render</string> - </property> - </widget> - </item> - <item row="4" column="0" > - <widget class="KPushButton" name="buttonStart" > - <property name="text" > - <string>Start</string> - </property> - </widget> - </item> - <item row="4" column="1" > - <spacer name="horizontalSpacer" > - <property name="orientation" > - <enum>Qt::Horizontal</enum> - </property> - <property name="sizeHint" stdset="0" > - <size> - <width>153</width> - <height>27</height> - </size> - </property> - </spacer> - </item> - <item row="4" column="2" colspan="2" > - <widget class="QDialogButtonBox" name="buttonBox" > - <property name="orientation" > - <enum>Qt::Horizontal</enum> - </property> - <property name="standardButtons" > - <set>QDialogButtonBox::Close</set> - </property> - </widget> - </item> - <item row="1" column="0" colspan="4" > + <item row="1" column="0" colspan="3" > <widget class="KTabWidget" name="ktabwidget" > <property name="currentIndex" > <number>0</number> @@ -129,17 +85,134 @@ </widget> </widget> </item> - <item row="3" column="0" colspan="2" > - <widget class="QCheckBox" name="tc_overlay" > + <item row="2" column="0" colspan="2" > + <layout class="QHBoxLayout" name="horizontalLayout" > + <item> + <widget class="QRadioButton" name="render_full" > + <property name="text" > + <string>Full project</string> + </property> + <property name="checked" > + <bool>true</bool> + </property> + </widget> + </item> + <item> + <widget class="QRadioButton" name="render_zone" > + <property name="text" > + <string>Selected zone</string> + </property> + </widget> + </item> + <item> + <widget class="QRadioButton" name="render_guide" > + <property name="text" > + <string>Guide zone</string> + </property> + </widget> + </item> + </layout> + </item> + <item row="3" column="0" colspan="3" > + <widget class="QGroupBox" name="guides_box" > + <property name="title" > + <string/> + </property> + <layout class="QGridLayout" name="gridLayout_2" > + <item row="0" column="0" > + <widget class="QLabel" name="label_4" > + <property name="text" > + <string>From</string> + </property> + </widget> + </item> + <item row="0" column="1" > + <widget class="KComboBox" name="guide_start" > + <property name="sizePolicy" > + <sizepolicy vsizetype="Fixed" hsizetype="MinimumExpanding" > + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + </widget> + </item> + <item row="0" column="2" > + <widget class="QLabel" name="label_2" > + <property name="text" > + <string>to</string> + </property> + </widget> + </item> + <item row="0" column="3" > + <widget class="KComboBox" name="guide_end" > + <property name="sizePolicy" > + <sizepolicy vsizetype="Fixed" hsizetype="MinimumExpanding" > + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + </widget> + </item> + </layout> + </widget> + </item> + <item row="4" column="0" colspan="3" > + <layout class="QHBoxLayout" name="horizontalLayout_3" > + <item> + <widget class="QCheckBox" name="play_after" > + <property name="text" > + <string>Play after render</string> + </property> + </widget> + </item> + <item> + <widget class="QCheckBox" name="tc_overlay" > + <property name="text" > + <string>Timecode overlay</string> + </property> + </widget> + </item> + </layout> + </item> + <item row="5" column="0" > + <widget class="KPushButton" name="buttonStart" > <property name="text" > - <string>Timecode overlay</string> + <string>Start</string> </property> </widget> </item> + <item row="5" column="1" > + <spacer name="horizontalSpacer" > + <property name="orientation" > + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0" > + <size> + <width>153</width> + <height>27</height> + </size> + </property> + </spacer> + </item> + <item row="5" column="2" > + <widget class="QDialogButtonBox" name="buttonBox" > + <property name="orientation" > + <enum>Qt::Horizontal</enum> + </property> + <property name="standardButtons" > + <set>QDialogButtonBox::Close</set> + </property> + </widget> + </item> </layout> </widget> <customwidgets> <customwidget> + <class>KComboBox</class> + <extends>QComboBox</extends> + <header>kcombobox.h</header> + </customwidget> + <customwidget> <class>KLineEdit</class> <extends>QLineEdit</extends> <header>klineedit.h</header> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <j-...@us...> - 2008-09-27 23:40:36
|
Revision: 2414 http://kdenlive.svn.sourceforge.net/kdenlive/?rev=2414&view=rev Author: j-b-m Date: 2008-09-27 23:40:30 +0000 (Sat, 27 Sep 2008) Log Message: ----------- * Add actions and shortcut for "set inpoint" and "set outpoint" * Rewrite timeline ruler Modified Paths: -------------- branches/KDE4/src/customruler.cpp branches/KDE4/src/customruler.h branches/KDE4/src/customtrackview.cpp branches/KDE4/src/customtrackview.h branches/KDE4/src/kdenliveui.rc branches/KDE4/src/mainwindow.cpp branches/KDE4/src/mainwindow.h branches/KDE4/src/monitor.cpp branches/KDE4/src/monitor.h branches/KDE4/src/monitormanager.cpp branches/KDE4/src/monitormanager.h Modified: branches/KDE4/src/customruler.cpp =================================================================== --- branches/KDE4/src/customruler.cpp 2008-09-25 22:05:52 UTC (rev 2413) +++ branches/KDE4/src/customruler.cpp 2008-09-27 23:40:30 UTC (rev 2414) @@ -45,21 +45,21 @@ static const int END_LABEL_X = 4; static const int END_LABEL_Y = (END_LABEL_X + LABEL_SIZE - 2); +static int littleMarkDistance; +static int mediumMarkDistance; +static int bigMarkDistance; + #include "definitions.h" const int CustomRuler::comboScale[] = { 1, 2, 5, 10, 25, 50, 125, 250, 500, 725, 1500, 3000, 6000, 12000}; CustomRuler::CustomRuler(Timecode tc, CustomTrackView *parent) - : KRuler(parent), m_timecode(tc), m_view(parent), m_duration(0) { + : QWidget(parent), m_timecode(tc), m_view(parent), m_duration(0), m_offset(0) { setFont(KGlobalSettings::toolBarFont()); - slotNewOffset(0); - setRulerMetricStyle(KRuler::Pixel); - setLength(1024); - setMaximum(1024); - setPixelPerMark(3); - setLittleMarkDistance(FRAME_SIZE); - setMediumMarkDistance(FRAME_SIZE * m_timecode.fps()); - setBigMarkDistance(FRAME_SIZE * m_timecode.fps() * 60); + m_scale = 3; + littleMarkDistance = FRAME_SIZE; + mediumMarkDistance = FRAME_SIZE * m_timecode.fps(); + bigMarkDistance = FRAME_SIZE * m_timecode.fps() * 60; m_zoneStart = 2 * m_timecode.fps(); m_zoneEnd = 10 * m_timecode.fps(); m_contextMenu = new QMenu(this); @@ -72,12 +72,15 @@ QAction *delAllGuides = m_contextMenu->addAction(KIcon("edit-delete"), i18n("Delete All Guides")); connect(delAllGuides, SIGNAL(triggered()), m_view, SLOT(slotDeleteAllGuides())); setMouseTracking(true); + setMinimumHeight(20); } void CustomRuler::setZone(QPoint p) { + int min = qMin(m_zoneStart, p.x()); + int max = qMax(m_zoneEnd, p.y()); m_zoneStart = p.x(); m_zoneEnd = p.y(); - update(); + update(min * m_factor - 2, 0, (max - min) * m_factor + 4, height()); } // virtual @@ -102,6 +105,8 @@ void CustomRuler::mouseMoveEvent(QMouseEvent * event) { if (event->buttons() == Qt::LeftButton) { int pos = (int)((event->x() + offset()) / m_factor); + int zoneStart = m_zoneStart; + int zoneEnd = m_zoneEnd; if (pos < 0) pos = 0; if (m_moveCursor == RULER_CURSOR) { m_view->setCursorPos(pos); @@ -115,7 +120,11 @@ } emit zoneMoved(m_zoneStart, m_zoneEnd); m_view->setDocumentModified(); - update(); + + int min = qMin(m_zoneStart, zoneStart); + int max = qMax(m_zoneEnd, zoneEnd); + update(min * m_factor - m_offset - 2, 0, (max - min) * m_factor + 4, height()); + } else { int pos = (int)((event->x() + offset())); if (event->y() <= 10) setCursor(Qt::ArrowCursor); @@ -144,19 +153,26 @@ } void CustomRuler::slotMoveRuler(int newPos) { - KRuler::slotNewOffset(newPos); + m_offset = newPos; + update(); } +int CustomRuler::offset() const { + return m_offset; +} + void CustomRuler::slotCursorMoved(int oldpos, int newpos) { - update(oldpos * m_factor - offset() - 6, 2, 17, 16); - update(newpos * m_factor - offset() - 6, 2, 17, 16); + if (qAbs(oldpos - newpos) * m_factor > 40) { + update(oldpos * m_factor - offset() - 6, 7, 17, 16); + update(newpos * m_factor - offset() - 6, 7, 17, 16); + } else update(qMin(oldpos, newpos) * m_factor - offset() - 6, 7, qAbs(oldpos - newpos) * m_factor + 17, 16); } void CustomRuler::setPixelPerMark(double rate) { int scale = comboScale[(int) rate]; m_factor = 1.0 / (double) scale * FRAME_SIZE; - KRuler::setPixelPerMark(1.0 / scale); - double fend = pixelPerMark() * littleMarkDistance(); + m_scale = 1.0 / (double) scale; + double fend = m_scale * littleMarkDistance; switch ((int) rate) { case 0: m_textSpacing = fend; @@ -191,11 +207,13 @@ m_textSpacing = fend * m_timecode.fps() * 600; break; } + update(); } void CustomRuler::setDuration(int d) { + int oldduration = m_duration; m_duration = d; - update(); + update(qMin(oldduration, m_duration) * m_factor - 1, 0, qAbs(oldduration - m_duration) * m_factor + 2, height()); } // virtual @@ -204,7 +222,7 @@ p.setClipRect(e->rect()); const int projectEnd = (int)(m_duration * m_factor); - p.fillRect(QRect(0, 0, projectEnd - offset(), height()), QBrush(QColor(245, 245, 245))); + p.fillRect(QRect(0, 0, projectEnd - m_offset, height()), QBrush(QColor(245, 245, 245))); const int zoneStart = (int)(m_zoneStart * m_factor); const int zoneEnd = (int)(m_zoneEnd * m_factor); @@ -212,77 +230,50 @@ p.fillRect(QRect(zoneStart - offset(), height() / 2, zoneEnd - zoneStart, height() / 2), QBrush(QColor(133, 255, 143))); const int value = m_view->cursorPos() * m_factor - offset(); - const int minval = minimum(); - const int maxval = maximum() + offset() - endOffset(); + int minval = (e->rect().left() + m_offset) / FRAME_SIZE - 1; + const int maxval = (e->rect().right() + m_offset) / FRAME_SIZE + 1; + if (minval < 0) minval = 0; - double f, fend, - offsetmin = (double)(minval - offset()), - offsetmax = (double)(maxval - offset()), - fontOffset = (((double)minval) > offsetmin) ? (double)minval : offsetmin; - QRect bg = QRect((int)offsetmin, 0, (int)offsetmax, height()); + kDebug() << "RULER MIN/MAX: " << minval << "-" << maxval << ", PIXELS: " << e->rect().left() << "-" << e->rect().right(); - QPalette palette; - //p.fillRect(bg, palette.light()); - // draw labels - p.setPen(palette.dark().color()); - // draw littlemarklabel + double f, fend; + const int offsetmax = maxval * FRAME_SIZE; - // draw mediummarklabel - // draw bigmarklabel - - // draw endlabel - /*if (d->showEndL) { - if (d->dir == Qt::Horizontal) { - p.translate( fontOffset, 0 ); - p.drawText( END_LABEL_X, END_LABEL_Y, d->endlabel ); - }*/ - - // draw the tiny marks - //if (showTinyMarks()) - /*{ - fend = pixelPerMark()*tinyMarkDistance(); - if (fend > 5) for ( f=offsetmin; f<offsetmax; f+=fend ) { - p.drawLine((int)f, BASE_MARK_X1, (int)f, BASE_MARK_X2); - } - }*/ - + QPalette palette; + p.setPen(palette.dark().color()); + int offsetmin = (e->rect().left() + m_offset) / m_textSpacing; + offsetmin = offsetmin * m_textSpacing; for (f = offsetmin; f < offsetmax; f += m_textSpacing) { - QString lab = m_timecode.getTimecodeFromFrames((int)((f - offsetmin) / m_factor + 0.5)); - p.drawText((int)f + 2, LABEL_SIZE, lab); + QString lab = m_timecode.getTimecodeFromFrames((int)((f) / m_factor + 0.5)); + p.drawText((int)f - m_offset + 2, LABEL_SIZE, lab); } - if (showLittleMarks()) { + if (true) { + offsetmin = (e->rect().left() + m_offset) / littleMarkDistance; + offsetmin = offsetmin * littleMarkDistance; // draw the little marks - fend = pixelPerMark() * littleMarkDistance(); - if (fend > 5) for (f = offsetmin; f < offsetmax; f += fend) + fend = m_scale * littleMarkDistance; + if (fend > 5) for (f = offsetmin - m_offset; f < offsetmax - m_offset; f += fend) p.drawLine((int)f, LITTLE_MARK_X1, (int)f, LITTLE_MARK_X2); } - if (showMediumMarks()) { + if (true) { + offsetmin = (e->rect().left() + m_offset) / mediumMarkDistance; + offsetmin = offsetmin * mediumMarkDistance; // draw medium marks - fend = pixelPerMark() * mediumMarkDistance(); - if (fend > 5) for (f = offsetmin; f < offsetmax; f += fend) + fend = m_scale * mediumMarkDistance; + if (fend > 5) for (f = offsetmin - m_offset - fend; f < offsetmax - m_offset + fend; f += fend) p.drawLine((int)f, MIDDLE_MARK_X1, (int)f, MIDDLE_MARK_X2); } - if (showBigMarks()) { + if (true) { + offsetmin = (e->rect().left() + m_offset) / bigMarkDistance; + offsetmin = offsetmin * bigMarkDistance; // draw big marks - fend = pixelPerMark() * bigMarkDistance(); - if (fend > 5) for (f = offsetmin; f < offsetmax; f += fend) + fend = m_scale * bigMarkDistance; + if (fend > 5) for (f = offsetmin - m_offset; f < offsetmax - m_offset; f += fend) p.drawLine((int)f, BIG_MARK_X1, (int)f, BIG_MARK_X2); } - /* if (d->showem) { - // draw end marks - if (d->dir == Qt::Horizontal) { - p.drawLine(minval-d->offset, END_MARK_X1, minval-d->offset, END_MARK_X2); - p.drawLine(maxval-d->offset, END_MARK_X1, maxval-d->offset, END_MARK_X2); - } - else { - p.drawLine(END_MARK_X1, minval-d->offset, END_MARK_X2, minval-d->offset); - p.drawLine(END_MARK_X1, maxval-d->offset, END_MARK_X2, maxval-d->offset); - } - }*/ - // draw zone cursors int off = offset(); if (zoneStart > 0) { Modified: branches/KDE4/src/customruler.h =================================================================== --- branches/KDE4/src/customruler.h 2008-09-25 22:05:52 UTC (rev 2413) +++ branches/KDE4/src/customruler.h 2008-09-27 23:40:30 UTC (rev 2414) @@ -1,14 +1,14 @@ #ifndef CUSTOMRULER_H #define CUSTOMRULER_H -#include <KRuler> +#include <QWidget> #include "customtrackview.h" #include "timecode.h" enum RULER_MOVE { RULER_CURSOR = 0, RULER_START = 1, RULER_MIDDLE = 2, RULER_END = 3 }; -class CustomRuler : public KRuler { +class CustomRuler : public QWidget { Q_OBJECT public: @@ -19,6 +19,7 @@ int inPoint() const; void setDuration(int d); void setZone(QPoint p); + int offset() const; protected: virtual void paintEvent(QPaintEvent * /*e*/); @@ -35,6 +36,8 @@ int m_duration; double m_textSpacing; double m_factor; + double m_scale; + int m_offset; RULER_MOVE m_moveCursor; QMenu *m_contextMenu; Modified: branches/KDE4/src/customtrackview.cpp =================================================================== --- branches/KDE4/src/customtrackview.cpp 2008-09-25 22:05:52 UTC (rev 2413) +++ branches/KDE4/src/customtrackview.cpp 2008-09-27 23:40:30 UTC (rev 2414) @@ -1704,26 +1704,18 @@ } void CustomTrackView::clipStart() { - QList<QGraphicsItem *> itemList = scene()->selectedItems(); - for (int i = 0; i < itemList.count(); i++) { - if (itemList.at(i)->type() == AVWIDGET) { - ClipItem *item = (ClipItem *) itemList.at(i); - setCursorPos((int) item->startPos().frames(m_document->fps())); - checkScrolling(); - break; - } + ClipItem *item = getMainActiveClip(); + if (item != NULL) { + setCursorPos((int) item->startPos().frames(m_document->fps())); + checkScrolling(); } } void CustomTrackView::clipEnd() { - QList<QGraphicsItem *> itemList = scene()->selectedItems(); - for (int i = 0; i < itemList.count(); i++) { - if (itemList.at(i)->type() == AVWIDGET) { - ClipItem *item = (ClipItem *) itemList.at(i); - setCursorPos((int) item->endPos().frames(m_document->fps())); - checkScrolling(); - break; - } + ClipItem *item = getMainActiveClip(); + if (item != NULL) { + setCursorPos((int) item->endPos().frames(m_document->fps())); + checkScrolling(); } } @@ -2236,12 +2228,72 @@ } -/* -void CustomTrackView::drawForeground ( QPainter * painter, const QRectF & rect ) -{ - //kDebug()<<"///// DRAWING FB: "<<rect.x()<<", width: "<<rect.width(); - painter->fillRect(rect, QColor(50, rand() % 250,50,100)); - painter->drawLine(m_cursorPos, rect.y(), m_cursorPos, rect.y() + rect.height()); +ClipItem *CustomTrackView::getClipUnderCursor() const { + QRectF rect((double) m_cursorPos, 0.0, 1.0, (double)(m_tracksHeight * m_scene->m_tracksList.count())); + QList<QGraphicsItem *> collisions = scene()->items(rect, Qt::IntersectsItemBoundingRect); + for (int i = 0; i < collisions.count(); i++) { + if (collisions.at(i)->type() == AVWIDGET) { + return static_cast < ClipItem *>(collisions.at(i)); + } + } + return NULL; } -*/ + +ClipItem *CustomTrackView::getMainActiveClip() const { + QList<QGraphicsItem *> clips = scene()->selectedItems(); + if (clips.isEmpty()) { + return getClipUnderCursor(); + } else { + ClipItem *item = NULL; + for (int i = 0; i < clips.count(); ++i) { + if (clips.at(i)->type() == AVWIDGET) + item = static_cast < ClipItem *>(clips.at(i)); + if (item->startPos().frames(m_document->fps()) <= m_cursorPos && item->endPos().frames(m_document->fps()) >= m_cursorPos) break; + } + if (item) return item; + } + return NULL; +} + +ClipItem *CustomTrackView::getActiveClipUnderCursor() const { + QList<QGraphicsItem *> clips = scene()->selectedItems(); + if (clips.isEmpty()) { + return getClipUnderCursor(); + } else { + ClipItem *item; + for (int i = 0; i < clips.count(); ++i) { + if (clips.at(i)->type() == AVWIDGET) + item = static_cast < ClipItem *>(clips.at(i)); + if (item->startPos().frames(m_document->fps()) <= m_cursorPos && item->endPos().frames(m_document->fps()) >= m_cursorPos) return item; + } + } + return NULL; +} + +void CustomTrackView::setInPoint() { + ClipItem *clip = getActiveClipUnderCursor(); + if (clip == NULL) { + emit displayMessage(i18n("You must select one clip for this action"), ErrorMessage); + return; + } + ItemInfo startInfo = clip->info(); + ItemInfo endInfo = clip->info(); + endInfo.startPos = GenTime(m_cursorPos, m_document->fps()); + ResizeClipCommand *command = new ResizeClipCommand(this, startInfo, endInfo, true); + m_commandStack->push(command); +} + +void CustomTrackView::setOutPoint() { + ClipItem *clip = getActiveClipUnderCursor(); + if (clip == NULL) { + emit displayMessage(i18n("You must select one clip for this action"), ErrorMessage); + return; + } + ItemInfo startInfo = clip->info(); + ItemInfo endInfo = clip->info(); + endInfo.endPos = GenTime(m_cursorPos, m_document->fps()); + ResizeClipCommand *command = new ResizeClipCommand(this, startInfo, endInfo, true); + m_commandStack->push(command); +} + #include "customtrackview.moc" Modified: branches/KDE4/src/customtrackview.h =================================================================== --- branches/KDE4/src/customtrackview.h 2008-09-25 22:05:52 UTC (rev 2413) +++ branches/KDE4/src/customtrackview.h 2008-09-27 23:40:30 UTC (rev 2414) @@ -96,6 +96,8 @@ void changeClipSpeed(); void doChangeClipSpeed(ItemInfo info, double speed, const QString &id); void setDocumentModified(); + void setInPoint(); + void setOutPoint(); public slots: void setCursorPos(int pos, bool seek = true); @@ -194,6 +196,9 @@ bool canBePastedTo(ItemInfo info, int type) const; bool canBePasted(QList<AbstractClipItem *> items, GenTime offset, int trackOffset) const; bool canBeMoved(QList<AbstractClipItem *> items, GenTime offset, int trackOffset) const; + ClipItem *getClipUnderCursor() const; + ClipItem *getMainActiveClip() const; + ClipItem *getActiveClipUnderCursor() const; private slots: void slotRefreshGuides(); Modified: branches/KDE4/src/kdenliveui.rc =================================================================== --- branches/KDE4/src/kdenliveui.rc 2008-09-25 22:05:52 UTC (rev 2413) +++ branches/KDE4/src/kdenliveui.rc 2008-09-27 23:40:30 UTC (rev 2414) @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE kpartgui SYSTEM "kpartgui.dtd"> -<gui name="kdenlive" version="21"> +<gui name="kdenlive" version="22"> <ToolBar name="extraToolBar" > <text>Extra Toolbar</text> <Action name="project_render" /> @@ -57,16 +57,21 @@ <Menu name="monitor" ><text>Monitor</text> <Action name="monitor_play" /> <Separator /> - <Action name="seek_start" /> - <Action name="monitor_seek_snap_backward" /> - <Action name="seek_clip_start" /> + <Menu name="monitor_go" ><text>Go To</text> + <Action name="seek_start" /> + <Action name="monitor_seek_snap_backward" /> + <Action name="seek_clip_start" /> + <Action name="seek_clip_end" /> + <Action name="monitor_seek_snap_forward" /> + <Action name="seek_end" /> + </Menu> <Action name="monitor_seek_backward" /> <Action name="monitor_seek_backward-one-frame" /> <Action name="monitor_seek_forward-one-frame" /> <Action name="monitor_seek_forward" /> - <Action name="seek_clip_end" /> - <Action name="monitor_seek_snap_forward" /> - <Action name="seek_end" /> + <Separator /> + <Action name="mark_in" /> + <Action name="mark_out" /> </Menu> <Menu name="dockwindows" ><text>View</text> </Menu> Modified: branches/KDE4/src/mainwindow.cpp =================================================================== --- branches/KDE4/src/mainwindow.cpp 2008-09-25 22:05:52 UTC (rev 2413) +++ branches/KDE4/src/mainwindow.cpp 2008-09-27 23:40:30 UTC (rev 2414) @@ -605,10 +605,23 @@ connect(projectRender, SIGNAL(triggered(bool)), this, SLOT(slotRenderProject())); KAction* monitorPlay = new KAction(KIcon("media-playback-start"), i18n("Play"), this); - monitorPlay->setShortcut(Qt::Key_Space); + KShortcut playShortcut; + playShortcut.setPrimary(Qt::Key_Space); + playShortcut.setAlternate(Qt::Key_K); + monitorPlay->setShortcut(playShortcut); actionCollection()->addAction("monitor_play", monitorPlay); connect(monitorPlay, SIGNAL(triggered(bool)), m_monitorManager, SLOT(slotPlay())); + KAction *markIn = actionCollection()->addAction("mark_in"); + markIn->setText(i18n("Set in point")); + markIn->setShortcut(Qt::Key_I); + connect(markIn, SIGNAL(triggered(bool)), this, SLOT(slotSetInPoint())); + + KAction *markOut = actionCollection()->addAction("mark_out"); + markOut->setText(i18n("Set in point")); + markOut->setShortcut(Qt::Key_O); + connect(markOut, SIGNAL(triggered(bool)), this, SLOT(slotSetOutPoint())); + KAction* monitorSeekBackward = new KAction(KIcon("media-seek-backward"), i18n("Rewind"), this); monitorSeekBackward->setShortcut(Qt::Key_J); actionCollection()->addAction("monitor_seek_backward", monitorSeekBackward); @@ -1444,28 +1457,28 @@ } void MainWindow::slotSnapRewind() { - if (m_monitorManager->projectMonitorFocused()) { + if (m_projectMonitor->isActive()) { if (m_activeTimeline) m_activeTimeline->projectView()->slotSeekToPreviousSnap(); } } void MainWindow::slotSnapForward() { - if (m_monitorManager->projectMonitorFocused()) { + if (m_projectMonitor->isActive()) { if (m_activeTimeline) m_activeTimeline->projectView()->slotSeekToNextSnap(); } } void MainWindow::slotClipStart() { - if (m_monitorManager->projectMonitorFocused()) { + if (m_projectMonitor->isActive()) { if (m_activeTimeline) m_activeTimeline->projectView()->clipStart(); } } void MainWindow::slotClipEnd() { - if (m_monitorManager->projectMonitorFocused()) { + if (m_projectMonitor->isActive()) { if (m_activeTimeline) m_activeTimeline->projectView()->clipEnd(); } @@ -1607,4 +1620,16 @@ } +void MainWindow::slotSetInPoint() { + if (m_clipMonitor->isActive()) { + m_clipMonitor->slotSetZoneStart(); + } else m_activeTimeline->projectView()->setInPoint(); +} + +void MainWindow::slotSetOutPoint() { + if (m_clipMonitor->isActive()) { + m_clipMonitor->slotSetZoneEnd(); + } else m_activeTimeline->projectView()->setOutPoint(); +} + #include "mainwindow.moc" Modified: branches/KDE4/src/mainwindow.h =================================================================== --- branches/KDE4/src/mainwindow.h 2008-09-25 22:05:52 UTC (rev 2413) +++ branches/KDE4/src/mainwindow.h 2008-09-27 23:40:30 UTC (rev 2414) @@ -240,6 +240,9 @@ void slotAdjustClipMonitor(); void slotAdjustProjectMonitor(); void slotSaveZone(Render *render, QPoint zone); + + void slotSetInPoint(); + void slotSetOutPoint(); }; Modified: branches/KDE4/src/monitor.cpp =================================================================== --- branches/KDE4/src/monitor.cpp 2008-09-25 22:05:52 UTC (rev 2413) +++ branches/KDE4/src/monitor.cpp 2008-09-27 23:40:30 UTC (rev 2414) @@ -316,6 +316,10 @@ if (!outputFile.isEmpty()) frame.save(outputFile); } +bool Monitor::isActive() const { + return m_isActive; +} + void Monitor::activateMonitor() { if (!m_isActive) m_monitorManager->activateMonitor(m_name); } Modified: branches/KDE4/src/monitor.h =================================================================== --- branches/KDE4/src/monitor.h 2008-09-25 22:05:52 UTC (rev 2413) +++ branches/KDE4/src/monitor.h 2008-09-27 23:40:30 UTC (rev 2414) @@ -39,6 +39,7 @@ MonitorRefresh(QWidget* parent); virtual void paintEvent(QPaintEvent * event); void setRenderer(Render* render); + private: Render *m_renderer; }; @@ -52,6 +53,7 @@ void resetProfile(); QString name() const; void resetSize(); + bool isActive() const; protected: virtual void mousePressEvent(QMouseEvent * event); @@ -92,8 +94,6 @@ void slotSetThumbFrame(); void slotSetSizeOneToOne(); void slotSetSizeOneToTwo(); - void slotSetZoneStart(); - void slotSetZoneEnd(); void slotSaveZone(); public slots: @@ -115,6 +115,8 @@ void saveSceneList(QString path, QDomElement info = QDomElement()); void slotStart(); void slotEnd(); + void slotSetZoneStart(); + void slotSetZoneEnd(); void slotZoneStart(); void slotZoneEnd(); void slotZoneMoved(int start, int end); Modified: branches/KDE4/src/monitormanager.cpp =================================================================== --- branches/KDE4/src/monitormanager.cpp 2008-09-25 22:05:52 UTC (rev 2413) +++ branches/KDE4/src/monitormanager.cpp 2008-09-27 23:40:30 UTC (rev 2414) @@ -37,11 +37,6 @@ m_projectMonitor = projectMonitor; } -bool MonitorManager::projectMonitorFocused() { - if (m_activeMonitor != "clip") return true; - return false; -} - void MonitorManager::activateMonitor(QString name) { if (m_activeMonitor == name) return; if (name == "clip") { Modified: branches/KDE4/src/monitormanager.h =================================================================== --- branches/KDE4/src/monitormanager.h 2008-09-25 22:05:52 UTC (rev 2413) +++ branches/KDE4/src/monitormanager.h 2008-09-27 23:40:30 UTC (rev 2414) @@ -34,7 +34,6 @@ void initMonitors(Monitor *clipMonitor, Monitor *projectMonitor); Timecode timecode(); void switchMonitors(); - bool projectMonitorFocused(); void resetProfiles(Timecode tc); public slots: This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <j-...@us...> - 2008-09-28 00:07:38
|
Revision: 2415 http://kdenlive.svn.sourceforge.net/kdenlive/?rev=2415&view=rev Author: j-b-m Date: 2008-09-28 00:07:30 +0000 (Sun, 28 Sep 2008) Log Message: ----------- Remove *.jpeg files from slideshows (only keep *.jpg) since MLT can only recognize one extension in a slideshow. Requires some work on MLT to be properly fixed, see http://www.kdenlive.org:80/mantis/view.php?id=148 Modified Paths: -------------- branches/KDE4/src/clipproperties.cpp branches/KDE4/src/slideshowclip.cpp Modified: branches/KDE4/src/clipproperties.cpp =================================================================== --- branches/KDE4/src/clipproperties.cpp 2008-09-27 23:40:30 UTC (rev 2414) +++ branches/KDE4/src/clipproperties.cpp 2008-09-28 00:07:30 UTC (rev 2415) @@ -314,7 +314,9 @@ extension = "/.all.gif"; break; default: - filters << "*.jpg" << "*.jpeg"; + filters << "*.jpg"; + // TODO: improve jpeg image detection with extension like jpeg, requires change in MLT image producers + // << "*.jpeg"; extension = "/.all.jpg"; break; } Modified: branches/KDE4/src/slideshowclip.cpp =================================================================== --- branches/KDE4/src/slideshowclip.cpp 2008-09-27 23:40:30 UTC (rev 2414) +++ branches/KDE4/src/slideshowclip.cpp 2008-09-28 00:07:30 UTC (rev 2415) @@ -103,7 +103,9 @@ filters << "*.gif"; break; default: - filters << "*.jpg" << "*.jpeg"; + filters << "*.jpg"; + // TODO: improve jpeg image detection with extension like jpeg, requires change in MLT image producers + // << "*.jpeg"; break; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <j-...@us...> - 2008-09-28 00:53:47
|
Revision: 2416 http://kdenlive.svn.sourceforge.net/kdenlive/?rev=2416&view=rev Author: j-b-m Date: 2008-09-28 00:53:41 +0000 (Sun, 28 Sep 2008) Log Message: ----------- * try to use kdenlive_render from same directory as kdenlive * remove unused files Modified Paths: -------------- branches/KDE4/src/CMakeLists.txt branches/KDE4/src/mainwindow.cpp Removed Paths: ------------- branches/KDE4/src/renderjob.cpp branches/KDE4/src/renderjob.h Modified: branches/KDE4/src/CMakeLists.txt =================================================================== --- branches/KDE4/src/CMakeLists.txt 2008-09-28 00:07:30 UTC (rev 2415) +++ branches/KDE4/src/CMakeLists.txt 2008-09-28 00:53:41 UTC (rev 2416) @@ -105,7 +105,6 @@ effectslistwidget.cpp titledocument.cpp transition.cpp - renderjob.cpp renderwidget.cpp abstractclipitem.cpp transitionsettings.cpp Modified: branches/KDE4/src/mainwindow.cpp =================================================================== --- branches/KDE4/src/mainwindow.cpp 2008-09-28 00:07:30 UTC (rev 2415) +++ branches/KDE4/src/mainwindow.cpp 2008-09-28 00:53:41 UTC (rev 2416) @@ -59,7 +59,6 @@ #include "profilesdialog.h" #include "projectsettings.h" #include "events.h" -#include "renderjob.h" #include "clipmanager.h" #include "projectlist.h" #include "monitor.h" @@ -965,7 +964,10 @@ KdenliveSettings::setMltpath(QString(MLT_PREFIX) + QString("/share/mlt/profiles/")); } if (KdenliveSettings::rendererpath().isEmpty()) { - KdenliveSettings::setRendererpath(KStandardDirs::findExe("inigo")); + QString inigoPath = QString(MLT_PREFIX) + QString("/bin/inigo"); + if (!QFile::exists(inigoPath)) + inigoPath = KStandardDirs::findExe("inigo"); + else KdenliveSettings::setRendererpath(inigoPath); } QStringList profilesFilter; profilesFilter << "*"; @@ -1073,8 +1075,9 @@ if (videoPlayer.isEmpty()) KMessageBox::sorry(this, i18n("Cannot play video after rendering because the default video player application is not set.\nPlease define it in Kdenlive settings dialog.")); } args << KdenliveSettings::rendererpath() << m_activeDocument->profilePath() << render << videoPlayer << temp.fileName() << dest << avformat_args; - QProcess::startDetached("kdenlive_render", args); - kDebug() << "/// STARTING RENDER PROCESS\n\nARGS:\n" << args; + QString renderer = QCoreApplication::applicationDirPath() + QString("/kdenlive_render"); + if (!QFile::exists(renderer)) renderer = "kdenlive_render"; + QProcess::startDetached(renderer, args); } } Deleted: branches/KDE4/src/renderjob.cpp =================================================================== --- branches/KDE4/src/renderjob.cpp 2008-09-28 00:07:30 UTC (rev 2415) +++ branches/KDE4/src/renderjob.cpp 2008-09-28 00:53:41 UTC (rev 2416) @@ -1,86 +0,0 @@ -/*************************************************************************** - * Copyright (C) 2007 by Jean-Baptiste Mardelle (jb...@kd...) * - * * - * 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. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License * - * along with this program; if not, write to the * - * Free Software Foundation, Inc., * - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * - ***************************************************************************/ - - -#include <KDebug> -#include <KLocale> -#include <kuiserverjobtracker.h> - -#include "renderjob.h" -#include "timecode.h" -#include "kdenlivesettings.h" - - - -RenderJob::RenderJob(KUrl scenelist, KUrl dest) : KJob(), m_scenelist(scenelist), m_dest(dest), m_progress(0) { - m_renderProcess = new KProcess; - *m_renderProcess << "inigo" << scenelist.path() << "-consumer" << "avformat:" + m_dest.path() << "progress=1"; - connect(m_renderProcess, SIGNAL(finished(int, QProcess::ExitStatus)), this, SLOT(slotIsOver(int, QProcess::ExitStatus))); - connect(m_renderProcess, SIGNAL(readyReadStandardOutput()), this, SLOT(receivedStderr())); - connect(m_renderProcess, SIGNAL(readyReadStandardError()), this, SLOT(receivedStderr())); - m_renderProcess->setOutputChannelMode(KProcess::OnlyStderrChannel); - m_renderProcess->start(); - -} - - -RenderJob::~RenderJob() { -} - -void RenderJob::receivedStderr() { - QString result = QString(m_renderProcess->readAllStandardError()); - result = result.simplified(); - result = result.section(" ", -1); - int pro = result.toInt(); - if (pro > m_progress) { - m_progress = pro; - update(); - } -} - -void RenderJob::start() { - registerJob(this); -} - -void RenderJob::registerJob(KJob *job) { - KIO::getJobTracker()->registerJob(job); - emit description(this, "Rendering " + m_dest.fileName(), - qMakePair(QString("source"), m_scenelist.path()), - qMakePair(QString("destination"), m_dest.path())); -} - -void RenderJob::unregisterJob(KJob *job) { - KIO::getJobTracker()->unregisterJob(job); -} - - -unsigned long RenderJob::percent() const { - return m_progress; -} - -void RenderJob::update() { - setPercent(percent()); -} - -void RenderJob::slotIsOver(int exitcode, QProcess::ExitStatus status) { - emitResult(); - KIO::getJobTracker()->unregisterJob(this); -} - -#include "renderjob.moc" Deleted: branches/KDE4/src/renderjob.h =================================================================== --- branches/KDE4/src/renderjob.h 2008-09-28 00:07:30 UTC (rev 2415) +++ branches/KDE4/src/renderjob.h 2008-09-28 00:53:41 UTC (rev 2416) @@ -1,57 +0,0 @@ -/*************************************************************************** - * Copyright (C) 2007 by Jean-Baptiste Mardelle (jb...@kd...) * - * * - * 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. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License * - * along with this program; if not, write to the * - * Free Software Foundation, Inc., * - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * - ***************************************************************************/ - - -#ifndef RENDERJOB_H -#define RENDERJOB_H - -#include <KJob> -#include <KUrl> -#include <KProcess> -#include <kio/job.h> -#include <kio/filejob.h> - -#include "gentime.h" -#include "definitions.h" - -class RenderJob : public KJob { - Q_OBJECT -public: - RenderJob(KUrl scenelist, KUrl dest); - ~RenderJob(); - - void registerJob(KJob *); - void unregisterJob(KJob *); - - void start(); - unsigned long percent() const; - -private slots: - void update(); - void slotIsOver(int exitcode, QProcess::ExitStatus status); - void receivedStderr(); - -private: - KUrl m_scenelist; - KUrl m_dest; - int m_progress; - KProcess *m_renderProcess; -}; - -#endif This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <j-...@us...> - 2008-10-01 19:47:15
|
Revision: 2423 http://kdenlive.svn.sourceforge.net/kdenlive/?rev=2423&view=rev Author: j-b-m Date: 2008-10-01 19:47:11 +0000 (Wed, 01 Oct 2008) Log Message: ----------- Allow import of Kdenlive 0.5 title clips (double click on each text clip & click ok to fix them after opening document). Modified Paths: -------------- branches/KDE4/src/kdenlivedoc.cpp branches/KDE4/src/kdenlivedoc.h Modified: branches/KDE4/src/kdenlivedoc.cpp =================================================================== --- branches/KDE4/src/kdenlivedoc.cpp 2008-10-01 19:44:36 UTC (rev 2422) +++ branches/KDE4/src/kdenlivedoc.cpp 2008-10-01 19:47:11 UTC (rev 2423) @@ -405,6 +405,7 @@ max = producers.count(); for (int i = 0; i < max; i++) { QDomElement prod = producers.at(i).toElement(); + if (prod.attribute("mlt_service") == "framebuffer") { QString slowmotionprod = prod.attribute("resource"); slowmotionprod.replace(':', '?'); @@ -412,7 +413,6 @@ prod.setAttribute("resource", slowmotionprod); } } - // move producers to correct place, markers to a global list, fix clip descriptions QDomElement markers = m_document.createElement("markers"); producers = m_document.elementsByTagName("producer"); @@ -420,25 +420,100 @@ for (int i = 0; i < max; i++) { QDomElement prod = producers.at(0).toElement(); QDomNode m = prod.firstChild(); - if (!m.isNull() && m.toElement().tagName() == "markers") { - QDomNodeList prodchilds = m.childNodes(); - int maxchild = prodchilds.count(); - for (int k = 0; k < maxchild; k++) { - QDomElement mark = prodchilds.at(0).toElement(); - mark.setAttribute("id", prod.attribute("id")); - markers.insertAfter(mark, QDomNode()); + if (!m.isNull()) { + if (m.toElement().tagName() == "markers") { + QDomNodeList prodchilds = m.childNodes(); + int maxchild = prodchilds.count(); + for (int k = 0; k < maxchild; k++) { + QDomElement mark = prodchilds.at(0).toElement(); + mark.setAttribute("id", prod.attribute("id")); + markers.insertAfter(mark, QDomNode()); + } + prod.removeChild(m); + } else if (prod.attribute("type").toInt() == TEXT) { + // convert title clip + if (m.toElement().tagName() == "textclip") { + QDomDocument tdoc; + QDomElement titleclip = m.toElement(); + QDomElement title = tdoc.createElement("kdenlivetitle"); + tdoc.appendChild(title); + QDomNodeList objects = titleclip.childNodes(); + int maxchild = objects.count(); + for (int k = 0; k < maxchild; k++) { + QString objectxml; + QDomElement ob = objects.at(k).toElement(); + if (ob.attribute("type") == "3") { + // text object + QDomElement item = tdoc.createElement("item"); + item.setAttribute("z-index", ob.attribute("z")); + item.setAttribute("type", "QGraphicsTextItem"); + QDomElement position = tdoc.createElement("position"); + position.setAttribute("x", ob.attribute("x")); + position.setAttribute("y", ob.attribute("y")); + QDomElement content = tdoc.createElement("content"); + content.setAttribute("font", ob.attribute("font_family")); + content.setAttribute("font-size", ob.attribute("font_size")); + content.setAttribute("font-bold", ob.attribute("bold")); + content.setAttribute("font-italic", ob.attribute("italic")); + content.setAttribute("font-underline", ob.attribute("underline")); + QString col = ob.attribute("color"); + QColor c(col); + content.setAttribute("font-color", colorToString(c)); + QDomText conttxt = tdoc.createTextNode(ob.attribute("text")); + content.appendChild(conttxt); + item.appendChild(position); + item.appendChild(content); + title.appendChild(item); + } else if (ob.attribute("type") == "5") { + // rectangle object + QDomElement item = tdoc.createElement("item"); + item.setAttribute("z-index", ob.attribute("z")); + item.setAttribute("type", "QGraphicsRectItem"); + QDomElement position = tdoc.createElement("position"); + position.setAttribute("x", ob.attribute("x")); + position.setAttribute("y", ob.attribute("y")); + QDomElement content = tdoc.createElement("content"); + QString col = ob.attribute("color"); + QColor c(col); + content.setAttribute("brushcolor", colorToString(c)); + QString rect = "0,0,"; + rect.append(ob.attribute("width")); + rect.append(","); + rect.append(ob.attribute("height")); + content.setAttribute("rect", rect); + item.appendChild(position); + item.appendChild(content); + title.appendChild(item); + } + } + prod.setAttribute("xmldata", tdoc.toString()); + QString titlesFolder = projectFolder().path() + "/titles/"; + KStandardDirs::makeDir(titlesFolder); + QString titleName = "title"; + int counter = 0; + QString path = titlesFolder + titleName + QString::number(counter).rightJustified(3, '0', false); + while (QFile::exists(path + ".png")) { + counter++; + path = titlesFolder + titleName + QString::number(counter).rightJustified(3, '0', false); + } + prod.setAttribute("xml", path); + prod.setAttribute("resource", path + ".png"); + //kDebug()<<"TITLE DATA:\n"<<tdoc.toString(); + prod.removeChild(m); + } + + } else if (m.isText()) { + QString comment = m.nodeValue(); + if (!comment.isEmpty()) { + prod.setAttribute("description", comment); + } + prod.removeChild(m); } - prod.removeChild(m); - } else if (m.isText()) { - QString comment = m.nodeValue(); - if (!comment.isEmpty()) { - prod.setAttribute("description", comment); - } - prod.removeChild(m); } int duration = prod.attribute("duration").toInt(); if (duration > 0) prod.setAttribute("out", QString::number(duration)); westley.insertBefore(prod, QDomNode()); + } QDomNode westley0 = m_document.elementsByTagName("westley").at(0); @@ -459,6 +534,12 @@ //kDebug() << "///////////////// END CONVERTED DOC:"; } +QString KdenliveDoc::colorToString(const QColor& c) { + QString ret = "%1,%2,%3,%4"; + ret = ret.arg(c.red()).arg(c.green()).arg(c.blue()).arg(c.alpha()); + return ret; +} + QDomElement KdenliveDoc::documentInfoXml() { QDomDocument doc; QDomElement e; Modified: branches/KDE4/src/kdenlivedoc.h =================================================================== --- branches/KDE4/src/kdenlivedoc.h 2008-10-01 19:44:36 UTC (rev 2422) +++ branches/KDE4/src/kdenlivedoc.h 2008-10-01 19:47:11 UTC (rev 2423) @@ -132,6 +132,7 @@ double m_documentLoadingProgress; void convertDocument(double version); QDomDocument createEmptyDocument(const int videotracks, const int audiotracks); + QString colorToString(const QColor& c); public slots: void slotCreateTextClip(QString group, const QString &groupId); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <j-...@us...> - 2008-10-01 22:42:36
|
Revision: 2424 http://kdenlive.svn.sourceforge.net/kdenlive/?rev=2424&view=rev Author: j-b-m Date: 2008-10-01 22:42:28 +0000 (Wed, 01 Oct 2008) Log Message: ----------- * Rewrite the way documents are loaded. Fixes lots of issue with disappearing clips after save Modified Paths: -------------- branches/KDE4/src/clipitem.cpp branches/KDE4/src/customtrackview.cpp branches/KDE4/src/customtrackview.h branches/KDE4/src/docclipbase.cpp branches/KDE4/src/kdenlivedoc.cpp branches/KDE4/src/kdenlivedoc.h branches/KDE4/src/mainwindow.cpp branches/KDE4/src/projectlist.cpp branches/KDE4/src/projectlist.h branches/KDE4/src/renderer.cpp branches/KDE4/src/renderer.h Modified: branches/KDE4/src/clipitem.cpp =================================================================== --- branches/KDE4/src/clipitem.cpp 2008-10-01 19:47:11 UTC (rev 2423) +++ branches/KDE4/src/clipitem.cpp 2008-10-01 22:42:28 UTC (rev 2424) @@ -930,7 +930,7 @@ // calculate new position. if (group() != 0) return pos(); QPointF newPos = value.toPointF(); - kDebug() << "/// MOVING CLIP ITEM.------------"; + //kDebug() << "/// MOVING CLIP ITEM.------------"; int xpos = projectScene()->getSnapPointForPos((int) newPos.x(), KdenliveSettings::snaptopoints()); xpos = qMax(xpos, 0); newPos.setX(xpos); Modified: branches/KDE4/src/customtrackview.cpp =================================================================== --- branches/KDE4/src/customtrackview.cpp 2008-10-01 19:47:11 UTC (rev 2423) +++ branches/KDE4/src/customtrackview.cpp 2008-10-01 22:42:28 UTC (rev 2424) @@ -185,7 +185,7 @@ if (event->buttons() != Qt::NoButton) { if (m_dragItem && m_tool == SELECTTOOL) { if (m_operationMode == MOVE) { - QGraphicsView::mouseMoveEvent(event); + if ((event->pos() - m_clickEvent).manhattanLength() >= QApplication::startDragDistance()) QGraphicsView::mouseMoveEvent(event); /*&& (event->pos() - m_clickEvent).manhattanLength() >= QApplication::startDragDistance()) { double snappedPos = getSnapPointForPos(mapToScene(event->pos()).x() - m_clickPoint.x()); @@ -2296,4 +2296,17 @@ m_commandStack->push(command); } +void CustomTrackView::updateAllThumbs() { + QList<QGraphicsItem *> itemList = items(); + ClipItem *item; + Transition *transitionitem; + for (int i = 0; i < itemList.count(); i++) { + if (itemList.at(i)->type() == AVWIDGET) { + item = static_cast <ClipItem *>(itemList.at(i)); + item->refreshClip(); + qApp->processEvents(); + } + } +} + #include "customtrackview.moc" Modified: branches/KDE4/src/customtrackview.h =================================================================== --- branches/KDE4/src/customtrackview.h 2008-10-01 19:47:11 UTC (rev 2423) +++ branches/KDE4/src/customtrackview.h 2008-10-01 22:42:28 UTC (rev 2424) @@ -98,6 +98,7 @@ void setDocumentModified(); void setInPoint(); void setOutPoint(); + void updateAllThumbs(); public slots: void setCursorPos(int pos, bool seek = true); Modified: branches/KDE4/src/docclipbase.cpp =================================================================== --- branches/KDE4/src/docclipbase.cpp 2008-10-01 19:47:11 UTC (rev 2423) +++ branches/KDE4/src/docclipbase.cpp 2008-10-01 22:42:28 UTC (rev 2424) @@ -361,6 +361,7 @@ } void DocClipBase::setProducer(Mlt::Producer *producer) { + if (producer == NULL) return; m_clipProducer = producer; m_clipProducer->set("transparency", m_properties.value("transparency").toInt()); if (m_thumbProd) m_thumbProd->setProducer(producer); Modified: branches/KDE4/src/kdenlivedoc.cpp =================================================================== --- branches/KDE4/src/kdenlivedoc.cpp 2008-10-01 19:47:11 UTC (rev 2423) +++ branches/KDE4/src/kdenlivedoc.cpp 2008-10-01 22:42:28 UTC (rev 2424) @@ -25,6 +25,8 @@ #include <KIO/NetAccess> #include <KApplication> +#include <mlt++/Mlt.h> + #include "kdenlivedoc.h" #include "docclipbase.h" #include "profilesdialog.h" @@ -405,7 +407,6 @@ max = producers.count(); for (int i = 0; i < max; i++) { QDomElement prod = producers.at(i).toElement(); - if (prod.attribute("mlt_service") == "framebuffer") { QString slowmotionprod = prod.attribute("resource"); slowmotionprod.replace(':', '?'); @@ -628,10 +629,26 @@ m_render = render; emit progressInfo(i18n("Loading playlist..."), 0); qApp->processEvents(); - if (m_render) m_render->setSceneList(m_document.toString(), m_startPos); + if (m_render) { + m_render->setSceneList(m_document.toString(), m_startPos); + checkProjectClips(); + } emit progressInfo(QString(), -1); } +void KdenliveDoc::checkProjectClips() { + if (m_render == NULL) return; + QList <Mlt::Producer *> prods = m_render->producersList(); + QString id ; + for (int i = 0; i < prods.count(); i++) { + id = prods.at(i)->get("id"); + DocClipBase *clip = m_clipManager->getClipById(id); + if (clip && clip->producer() == NULL) { + clip->setProducer(prods.at(i)); + } + } +} + Render *KdenliveDoc::renderer() { return m_render; } @@ -640,12 +657,6 @@ emit updateClipDisplay(id); } -void KdenliveDoc::updateAllProjectClips() { - QList <DocClipBase*> list = m_clipManager->documentClipList(); - for (int i = 0; i < list.count(); i++) - emit updateClipDisplay(list.at(i)->getId()); -} - int KdenliveDoc::getFramePos(QString duration) { return m_timecode.getFrameCount(duration, m_fps); } Modified: branches/KDE4/src/kdenlivedoc.h =================================================================== --- branches/KDE4/src/kdenlivedoc.h 2008-10-01 19:47:11 UTC (rev 2423) +++ branches/KDE4/src/kdenlivedoc.h 2008-10-01 22:42:28 UTC (rev 2424) @@ -99,7 +99,6 @@ KUrl projectFolder() const; /** Used to inform main app of the current document loading progress */ void loadingProgressed(); - void updateAllProjectClips(); void syncGuides(QList <Guide *> guides); void setZoom(int factor); int zoom() const; @@ -133,6 +132,7 @@ void convertDocument(double version); QDomDocument createEmptyDocument(const int videotracks, const int audiotracks); QString colorToString(const QColor& c); + void checkProjectClips(); public slots: void slotCreateTextClip(QString group, const QString &groupId); Modified: branches/KDE4/src/mainwindow.cpp =================================================================== --- branches/KDE4/src/mainwindow.cpp 2008-10-01 19:47:11 UTC (rev 2423) +++ branches/KDE4/src/mainwindow.cpp 2008-10-01 22:42:28 UTC (rev 2424) @@ -1221,7 +1221,8 @@ doc->setRenderer(m_projectMonitor->render); m_commandStack->setActiveStack(doc->commandStack()); KdenliveSettings::setProject_display_ratio(doc->dar()); - doc->updateAllProjectClips(); + m_projectList->updateAllClips(); + trackView->projectView()->updateAllThumbs(); //m_overView->setScene(trackView->projectScene()); Modified: branches/KDE4/src/projectlist.cpp =================================================================== --- branches/KDE4/src/projectlist.cpp 2008-10-01 19:47:11 UTC (rev 2423) +++ branches/KDE4/src/projectlist.cpp 2008-10-01 22:42:28 UTC (rev 2424) @@ -277,7 +277,7 @@ } } -void ProjectList::slotAddClip(DocClipBase *clip) { +void ProjectList::slotAddClip(DocClipBase *clip, bool getProperties) { const QString parent = clip->toXML().attribute("groupid"); ProjectItem *item = NULL; if (parent != 0) { @@ -302,7 +302,7 @@ } if (!annotation.isEmpty()) item->setText(2, annotation); } - emit getFileProperties(clip->toXML(), clip->getId()); + if (getProperties) emit getFileProperties(clip->toXML(), clip->getId()); } void ProjectList::slotUpdateClip(const QString &id) { @@ -310,6 +310,23 @@ item->setData(1, UsageRole, QString::number(item->numReferences())); } +void ProjectList::updateAllClips() { + QTreeWidgetItemIterator it(listView); + while (*it) { + ProjectItem *item = static_cast <ProjectItem *>(*it); + if (!item->isGroup()) { + if (item->referencedClip()->producer() == NULL) emit getFileProperties(item->referencedClip()->toXML(), item->referencedClip()->getId()); + else { + slotRefreshClipThumbnail(item, false); + item->changeDuration(item->referencedClip()->producer()->get_playtime()); + } + item->setData(1, UsageRole, QString::number(item->numReferences())); + qApp->processEvents(); + } + ++it; + } +} + void ProjectList::slotAddClip(QUrl givenUrl, QString group) { if (!m_commandStack) kDebug() << "!!!!!!!!!!!!!!!! NO CMD STK"; KUrl::List list; @@ -426,7 +443,7 @@ listView->clear(); QList <DocClipBase*> list = doc->clipManager()->documentClipList(); for (int i = 0; i < list.count(); i++) { - slotAddClip(list.at(i)); + slotAddClip(list.at(i), false); } m_fps = doc->fps(); @@ -457,14 +474,13 @@ if (item) slotRefreshClipThumbnail(item); } -void ProjectList::slotRefreshClipThumbnail(ProjectItem *item) { +void ProjectList::slotRefreshClipThumbnail(ProjectItem *item, bool update) { if (item) { - kDebug() << " / / / /PROJECT LIST, REFRESH THMB"; int height = 50; int width = (int)(height * m_render->dar()); QPixmap pix = item->referencedClip()->thumbProducer()->extractImage(item->referencedClip()->getClipThumbFrame(), width, height); item->setIcon(0, pix); - emit projectModified(); + if (update) emit projectModified(); } } Modified: branches/KDE4/src/projectlist.h =================================================================== --- branches/KDE4/src/projectlist.h 2008-10-01 19:47:11 UTC (rev 2423) +++ branches/KDE4/src/projectlist.h 2008-10-01 22:42:28 UTC (rev 2424) @@ -108,16 +108,17 @@ QDomElement producersList(); void setRenderer(Render *projectRender); void slotUpdateClipProperties(const QString &id, QMap <QString, QString> properties); + void updateAllClips(); public slots: void setDocument(KdenliveDoc *doc); void slotReplyGetImage(const QString &clipId, int pos, const QPixmap &pix, int w, int h); void slotReplyGetFileProperties(const QString &clipId, Mlt::Producer *producer, const QMap < QString, QString > &properties, const QMap < QString, QString > &metadata); - void slotAddClip(DocClipBase *clip); + void slotAddClip(DocClipBase *clip, bool getProperties = true); void slotDeleteClip(const QString &clipId); void slotUpdateClip(const QString &id); void slotRefreshClipThumbnail(const QString &clipId); - void slotRefreshClipThumbnail(ProjectItem *item); + void slotRefreshClipThumbnail(ProjectItem *item, bool update = true); void slotRemoveInvalidClip(const QString &id); void slotSelectClip(const QString &ix); Modified: branches/KDE4/src/renderer.cpp =================================================================== --- branches/KDE4/src/renderer.cpp 2008-10-01 19:47:11 UTC (rev 2423) +++ branches/KDE4/src/renderer.cpp 2008-10-01 22:42:28 UTC (rev 2424) @@ -2308,5 +2308,31 @@ fileConsumer.start(); } +QList <Mlt::Producer *> Render::producersList() { + QList <Mlt::Producer *> prods; + QStringList ids; + Mlt::Service service(m_mltProducer->parent().get_service()); + Mlt::Tractor tractor(service); + Mlt::Field *field = tractor.field(); + + int trackNb = tractor.count(); + for (int t = 1; t < trackNb; t++) { + Mlt::Producer trackProducer(tractor.track(t)); + Mlt::Playlist trackPlaylist((mlt_playlist) trackProducer.get_service()); + int clipNb = trackPlaylist.count(); + kDebug() << "// PARSING SCENE TRACK: " << t << ", CLIPS: " << clipNb; + for (int i = 0; i < clipNb; i++) { + Mlt::Producer *prod = trackPlaylist.get_clip(i); + Mlt::Producer *nprod = new Mlt::Producer(prod->get_parent()); + //kDebug()<<"PROD: "<<nprod->get("producer")<<", ID: "<<nprod->get("id")<<nprod->get("resource"); + if (nprod && !nprod->is_blank() && !ids.contains(nprod->get("id"))) { + ids.append(nprod->get("id")); + prods.append(nprod); + } + } + } + return prods; +} + #include "renderer.moc" Modified: branches/KDE4/src/renderer.h =================================================================== --- branches/KDE4/src/renderer.h 2008-10-01 19:47:11 UTC (rev 2423) +++ branches/KDE4/src/renderer.h 2008-10-01 22:42:28 UTC (rev 2424) @@ -177,6 +177,8 @@ in the ClipManager list and speed is the current speed */ int mltChangeClipSpeed(ItemInfo info, double speed, Mlt::Producer *prod); + QList <Mlt::Producer *> producersList(); + private: // Private attributes & methods /** The name of this renderer - useful to identify the renderes by what they do - e.g. background rendering, workspace monitor, etc... */ QString m_name; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <j-...@us...> - 2008-10-04 00:45:33
|
Revision: 2429 http://kdenlive.svn.sourceforge.net/kdenlive/?rev=2429&view=rev Author: j-b-m Date: 2008-10-04 00:45:22 +0000 (Sat, 04 Oct 2008) Log Message: ----------- Many improvements to title clips (recreate when missing, fix text selection visible in clip, improve zoom, ...) Modified Paths: -------------- branches/KDE4/src/clipmanager.cpp branches/KDE4/src/clipmanager.h branches/KDE4/src/graphicsscenerectmove.cpp branches/KDE4/src/graphicsscenerectmove.h branches/KDE4/src/kdenlivedoc.cpp branches/KDE4/src/kthumb.cpp branches/KDE4/src/mainwindow.cpp branches/KDE4/src/projectlist.cpp branches/KDE4/src/renderer.cpp branches/KDE4/src/titlewidget.cpp branches/KDE4/src/titlewidget.h branches/KDE4/src/widgets/titlewidget_ui.ui Modified: branches/KDE4/src/clipmanager.cpp =================================================================== --- branches/KDE4/src/clipmanager.cpp 2008-10-03 13:50:11 UTC (rev 2428) +++ branches/KDE4/src/clipmanager.cpp 2008-10-04 00:45:22 UTC (rev 2429) @@ -185,12 +185,11 @@ -void ClipManager::slotAddTextClipFile(const QString path, const QString xml, const QString group, const QString &groupId) { - kDebug() << "///// CLIP MANAGER, ADDING CLIP: " << path; +void ClipManager::slotAddTextClipFile(const QString titleName, const QString imagePath, const QString xml, const QString group, const QString &groupId) { QDomDocument doc; QDomElement prod = doc.createElement("producer"); - prod.setAttribute("resource", path + ".png"); - prod.setAttribute("xml", path); + prod.setAttribute("resource", imagePath); + prod.setAttribute("titlename", titleName); prod.setAttribute("xmldata", xml); uint id = m_clipIdCounter++; prod.setAttribute("id", QString::number(id)); Modified: branches/KDE4/src/clipmanager.h =================================================================== --- branches/KDE4/src/clipmanager.h 2008-10-03 13:50:11 UTC (rev 2428) +++ branches/KDE4/src/clipmanager.h 2008-10-04 00:45:22 UTC (rev 2429) @@ -50,7 +50,7 @@ void deleteClip(const QString &clipId); void slotAddClipFile(const KUrl url, const QString group, const QString &groupId); void slotAddClipList(const KUrl::List urls, const QString group, const QString &groupId); - void slotAddTextClipFile(const QString path, const QString xml, const QString group, const QString &groupId); + void slotAddTextClipFile(const QString titleName, const QString imagePath, const QString xml, const QString group, const QString &groupId); void slotAddColorClipFile(const QString name, const QString color, QString duration, const QString group, const QString &groupId); void slotAddSlideshowClipFile(const QString name, const QString path, int count, const QString duration, const bool loop, const bool fade, const QString &luma_duration, const QString &luma_file, const int softness, const QString group, const QString &groupId); DocClipBase *getClipById(const QString &clipId); Modified: branches/KDE4/src/graphicsscenerectmove.cpp =================================================================== --- branches/KDE4/src/graphicsscenerectmove.cpp 2008-10-03 13:50:11 UTC (rev 2428) +++ branches/KDE4/src/graphicsscenerectmove.cpp 2008-10-04 00:45:22 UTC (rev 2429) @@ -5,9 +5,11 @@ #include <QGraphicsSvgItem> #include <QGraphicsView> #include <QCursor> +#include <QTextCursor> #include <QList> #include <QKeyEvent> #include <QApplication> +#include <QTextBlock> #include "graphicsscenerectmove.h" @@ -96,6 +98,7 @@ if (g) { if (g->type() == 8) { QGraphicsTextItem *t = static_cast<QGraphicsTextItem *>(g); + m_selectedItem = g; t->setTextInteractionFlags(Qt::TextEditorInteraction); } } @@ -109,6 +112,7 @@ } void GraphicsSceneRectMove::mousePressEvent(QGraphicsSceneMouseEvent* e) { + m_clickPoint = e->screenPos(); QPointF p = e->scenePos(); p += QPoint(-2, -2); resizeMode = NoResize; @@ -130,6 +134,9 @@ if (m_selectedItem && m_selectedItem->type() == 8) { // disable text editing QGraphicsTextItem *t = static_cast<QGraphicsTextItem *>(m_selectedItem); + t->textCursor().setPosition(0); + QTextBlock cur = t->textCursor().block(); + t->setTextCursor(QTextCursor(cur)); t->setTextInteractionFlags(Qt::NoTextInteraction); } m_selectedItem = NULL; @@ -141,7 +148,7 @@ } } if (item != NULL) { - m_clickPoint = e->scenePos(); + m_sceneClickPoint = e->scenePos(); m_selectedItem = item; kDebug() << "///////// ITEM TYPE: " << item->type(); if (item->type() == 8) { @@ -180,7 +187,7 @@ } QGraphicsScene::mousePressEvent(e); } else if (m_tool == TITLE_RECTANGLE) { - m_clickPoint = e->scenePos(); + m_sceneClickPoint = e->scenePos(); m_selectedItem = NULL; } else if (m_tool == TITLE_TEXT) { m_selectedItem = addText(QString()); @@ -195,10 +202,25 @@ } +void GraphicsSceneRectMove::clearTextSelection() { + if (m_selectedItem && m_selectedItem->type() == 8) { + // disable text editing + QGraphicsTextItem *t = static_cast<QGraphicsTextItem *>(m_selectedItem); + t->textCursor().setPosition(0); + QTextBlock cur = t->textCursor().block(); + t->setTextCursor(QTextCursor(cur)); + t->setTextInteractionFlags(Qt::NoTextInteraction); + } + m_selectedItem = NULL; + clearSelection(); +} //virtual void GraphicsSceneRectMove::mouseMoveEvent(QGraphicsSceneMouseEvent* e) { - + if ((e->screenPos() - m_clickPoint).manhattanLength() < QApplication::startDragDistance()) { + e->accept(); + return; + } if (m_selectedItem && e->buttons() & Qt::LeftButton) { if (m_selectedItem->type() == 3 || m_selectedItem->type() == 13 || m_selectedItem->type() == 7) { QRectF newrect; @@ -239,8 +261,8 @@ newrect.setBottom(newpoint.y() - m_selectedItem->pos().y()); break; default: - QPointF diff = e->scenePos() - m_clickPoint; - m_clickPoint = e->scenePos(); + QPointF diff = e->scenePos() - m_sceneClickPoint; + m_sceneClickPoint = e->scenePos(); m_selectedItem->moveBy(diff.x(), diff.y()); break; } @@ -266,13 +288,12 @@ QGraphicsScene::mouseMoveEvent(e); return; } - QPointF diff = e->scenePos() - m_clickPoint; - m_clickPoint = e->scenePos(); + QPointF diff = e->scenePos() - m_sceneClickPoint; + m_sceneClickPoint = e->scenePos(); m_selectedItem->moveBy(diff.x(), diff.y()); } emit itemMoved(); } else if (m_tool == TITLE_SELECT) { - QPointF p = e->scenePos(); p += QPoint(-2, -2); resizeMode = NoResize; @@ -309,12 +330,12 @@ } QGraphicsScene::mouseMoveEvent(e); } else if (m_tool == TITLE_RECTANGLE && e->buttons() & Qt::LeftButton) { - if (m_selectedItem == NULL && (m_clickPoint.toPoint() - e->scenePos().toPoint()).manhattanLength() >= QApplication::startDragDistance()) { + if (m_selectedItem == NULL && (m_clickPoint - e->screenPos()).manhattanLength() >= QApplication::startDragDistance()) { // create new rect item - m_selectedItem = addRect(0, 0, e->scenePos().x() - m_clickPoint.x(), e->scenePos().y() - m_clickPoint.y()); + m_selectedItem = addRect(0, 0, e->scenePos().x() - m_sceneClickPoint.x(), e->scenePos().y() - m_sceneClickPoint.y()); emit newRect((QGraphicsRectItem *) m_selectedItem); m_selectedItem->setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable); - m_selectedItem->setPos(m_clickPoint); + m_selectedItem->setPos(m_sceneClickPoint); resizeMode = BottomRight; QGraphicsScene::mouseMoveEvent(e); } Modified: branches/KDE4/src/graphicsscenerectmove.h =================================================================== --- branches/KDE4/src/graphicsscenerectmove.h 2008-10-03 13:50:11 UTC (rev 2428) +++ branches/KDE4/src/graphicsscenerectmove.h 2008-10-04 00:45:22 UTC (rev 2429) @@ -16,6 +16,7 @@ void setZoom(double s); void setTool(TITLETOOL tool); TITLETOOL tool(); + void clearTextSelection(); protected: virtual void keyPressEvent(QKeyEvent * keyEvent); @@ -30,8 +31,9 @@ double zoom; QGraphicsItem* m_selectedItem; resizeModes resizeMode; - QPointF m_clickPoint; + QPointF m_sceneClickPoint; TITLETOOL m_tool; + QPoint m_clickPoint; signals: void itemMoved(); Modified: branches/KDE4/src/kdenlivedoc.cpp =================================================================== --- branches/KDE4/src/kdenlivedoc.cpp 2008-10-03 13:50:11 UTC (rev 2428) +++ branches/KDE4/src/kdenlivedoc.cpp 2008-10-04 00:45:22 UTC (rev 2429) @@ -488,17 +488,9 @@ } } prod.setAttribute("xmldata", tdoc.toString()); - QString titlesFolder = projectFolder().path() + "/titles/"; - KStandardDirs::makeDir(titlesFolder); - QString titleName = "title"; - int counter = 0; - QString path = titlesFolder + titleName + QString::number(counter).rightJustified(3, '0', false); - while (QFile::exists(path + ".png")) { - counter++; - path = titlesFolder + titleName + QString::number(counter).rightJustified(3, '0', false); - } - prod.setAttribute("xml", path); - prod.setAttribute("resource", path + ".png"); + QStringList titleInfo = TitleWidget::getFreeTitleInfo(projectFolder()); + prod.setAttribute("titlename", titleInfo.at(0)); + prod.setAttribute("resource", titleInfo.at(1)); //kDebug()<<"TITLE DATA:\n"<<tdoc.toString(); prod.removeChild(m); } @@ -646,6 +638,31 @@ if (clip && clip->producer() == NULL) { clip->setProducer(prods.at(i)); } + if (clip->clipType() == TEXT && !QFile::exists(clip->fileURL().path())) { + // regenerate text clip image if required + kDebug() << "// TITLE: " << clip->getProperty("titlename") << " Preview file: " << clip->getProperty("resource") << " DOES NOT EXIST"; + QString titlename = clip->getProperty("titlename"); + QString titleresource; + if (titlename.isEmpty()) { + QStringList titleInfo = TitleWidget::getFreeTitleInfo(projectFolder()); + titlename = titleInfo.at(0); + titleresource = titleInfo.at(1); + clip->setProperty("titlename", titlename); + kDebug() << "// New title set to: " << titlename; + } else { + titleresource = TitleWidget::getTitleResourceFromName(projectFolder(), titlename); + } + QString titlepath = projectFolder().path() + "/titles/"; + TitleWidget *dia_ui = new TitleWidget(KUrl(), titlepath, m_render, kapp->activeWindow()); + QDomDocument doc; + doc.setContent(clip->getProperty("xmldata")); + dia_ui->setXml(doc); + QPixmap pix = dia_ui->renderedPixmap(); + pix.save(titleresource); + clip->setProperty("resource", titleresource); + delete dia_ui; + clip->producer()->set("force_reload", 1); + } } } @@ -862,17 +879,11 @@ KStandardDirs::makeDir(titlesFolder); TitleWidget *dia_ui = new TitleWidget(KUrl(), titlesFolder, m_render, kapp->activeWindow()); if (dia_ui->exec() == QDialog::Accepted) { - QString titleName = "title"; - int counter = 0; - QString path = titlesFolder + titleName + QString::number(counter).rightJustified(3, '0', false); - while (QFile::exists(path + ".png")) { - counter++; - path = titlesFolder + titleName + QString::number(counter).rightJustified(3, '0', false); - } + QStringList titleInfo = TitleWidget::getFreeTitleInfo(projectFolder()); QPixmap pix = dia_ui->renderedPixmap(); - pix.save(path + ".png"); + pix.save(titleInfo.at(1)); //dia_ui->saveTitle(path + ".kdenlivetitle"); - m_clipManager->slotAddTextClipFile(path, dia_ui->xml().toString(), QString(), QString()); + m_clipManager->slotAddTextClipFile(titleInfo.at(0), titleInfo.at(1), dia_ui->xml().toString(), QString(), QString()); setModified(true); } delete dia_ui; Modified: branches/KDE4/src/kthumb.cpp =================================================================== --- branches/KDE4/src/kthumb.cpp 2008-10-03 13:50:11 UTC (rev 2428) +++ branches/KDE4/src/kthumb.cpp 2008-10-04 00:45:22 UTC (rev 2429) @@ -230,6 +230,11 @@ void KThumb::updateClipUrl(KUrl url) { m_url = url; + if (m_producer) { + char *tmp = Render::decodedString(url.path()); + m_producer->set("resource", tmp); + delete[] tmp; + } } //static Modified: branches/KDE4/src/mainwindow.cpp =================================================================== --- branches/KDE4/src/mainwindow.cpp 2008-10-03 13:50:11 UTC (rev 2428) +++ branches/KDE4/src/mainwindow.cpp 2008-10-04 00:45:22 UTC (rev 2429) @@ -1422,22 +1422,23 @@ void MainWindow::slotShowClipProperties(DocClipBase *clip) { if (clip->clipType() == TEXT) { - QString path = clip->getProperty("xml"); - TitleWidget *dia_ui = new TitleWidget(KUrl()/*path + ".kdenlivetitle")*/, path, m_projectMonitor->render, this); + QString titlepath = m_activeDocument->projectFolder().path() + "/titles/"; + QString path = clip->getProperty("resource"); + TitleWidget *dia_ui = new TitleWidget(KUrl(), titlepath, m_projectMonitor->render, this); QDomDocument doc; doc.setContent(clip->getProperty("xmldata")); dia_ui->setXml(doc); if (dia_ui->exec() == QDialog::Accepted) { - kDebug() << "// UPDATUING CLIP TITLE: " << path; QPixmap pix = dia_ui->renderedPixmap(); - pix.save(path + ".png"); + pix.save(path); //slotAddClipFile(KUrl("/tmp/kdenlivetitle.png"), QString(), -1); //m_clipManager->slotEditTextClipFile(id, dia_ui->xml().toString()); QMap <QString, QString> newprops; newprops.insert("xmldata", dia_ui->xml().toString()); EditClipCommand *command = new EditClipCommand(m_projectList, clip->getId(), clip->properties(), newprops, true); m_activeDocument->commandStack()->push(command); - //setModified(true); + m_clipMonitor->refreshMonitor(true); + m_activeDocument->setModified(true); } delete dia_ui; Modified: branches/KDE4/src/projectlist.cpp =================================================================== --- branches/KDE4/src/projectlist.cpp 2008-10-03 13:50:11 UTC (rev 2428) +++ branches/KDE4/src/projectlist.cpp 2008-10-04 00:45:22 UTC (rev 2429) @@ -41,6 +41,7 @@ #include "kdenlivesettings.h" #include "slideshowclip.h" #include "ui_colorclip_ui.h" +#include "titlewidget.h" #include "definitions.h" @@ -315,8 +316,20 @@ while (*it) { ProjectItem *item = static_cast <ProjectItem *>(*it); if (!item->isGroup()) { - if (item->referencedClip()->producer() == NULL) emit getFileProperties(item->referencedClip()->toXML(), item->referencedClip()->getId()); - else { + if (item->referencedClip()->producer() == NULL) { + DocClipBase *clip = item->referencedClip(); + if (clip->clipType() == TEXT && !QFile::exists(clip->fileURL().path())) { + // regenerate text clip image if required + TitleWidget *dia_ui = new TitleWidget(KUrl(), QString(), m_render, this); + QDomDocument doc; + doc.setContent(clip->getProperty("xmldata")); + dia_ui->setXml(doc); + QPixmap pix = dia_ui->renderedPixmap(); + pix.save(clip->fileURL().path()); + delete dia_ui; + } + emit getFileProperties(clip->toXML(), clip->getId()); + } else { slotRefreshClipThumbnail(item, false); item->changeDuration(item->referencedClip()->producer()->get_playtime()); } @@ -331,7 +344,7 @@ if (!m_commandStack) kDebug() << "!!!!!!!!!!!!!!!! NO CMD STK"; KUrl::List list; if (givenUrl.isEmpty()) { - list = KFileDialog::getOpenUrls(KUrl("kfiledialog:///clipfolder"), "application/vnd.kde.kdenlive application/vnd.westley.scenelist application/flv application/vnd.rn-realmedia video/x-dv video/dv video/x-msvideo video/mpeg video/x-ms-wmv audio/mpeg audio/x-mp3 audio/x-wav application/ogg video/mp4 video/quicktime image/gif image/jpeg image/png image/x-bmp image/svg+xml image/tiff image/x-xcf-gimp image/x-vnd.adobe.photoshop image/x-pcx image/x-exr video/mlt-playlist", this); + list = KFileDialog::getOpenUrls(KUrl("kfiledialog:///clipfolder"), "application/x-kdenlive application/x-flash-video application/vnd.rn-realmedia video/x-dv video/dv video/x-msvideo video/mpeg video/x-ms-wmv audio/mpeg audio/x-mp3 audio/x-wav application/ogg video/mp4 video/quicktime image/gif image/jpeg image/png image/x-bmp image/svg+xml image/tiff image/x-xcf-gimp image/x-vnd.adobe.photoshop image/x-pcx image/x-exr video/mlt-playlist", this); } else list.append(givenUrl); if (list.isEmpty()) return; Modified: branches/KDE4/src/renderer.cpp =================================================================== --- branches/KDE4/src/renderer.cpp 2008-10-03 13:50:11 UTC (rev 2428) +++ branches/KDE4/src/renderer.cpp 2008-10-04 00:45:22 UTC (rev 2429) @@ -469,6 +469,9 @@ KUrl url = KUrl(xml.attribute("resource", QString::null)); Mlt::Producer *producer; + if (xml.attribute("type").toInt() == TEXT && !QFile::exists(url.path())) { + return; + } if (xml.attribute("type").toInt() == COLOR) { char *tmp = decodedString("colour:" + xml.attribute("colour")); producer = new Mlt::Producer(*m_mltProfile, "fezzik", tmp); @@ -480,14 +483,22 @@ doc.appendChild(westley); westley.appendChild(play); play.appendChild(doc.importNode(xml, true)); - kDebug() << "/ / / / /CLIP XML: " << doc.toString(); char *tmp = decodedString(doc.toString()); producer = new Mlt::Producer(*m_mltProfile, "westley-xml", tmp); delete[] tmp; } else { - char *tmp = decodedString(url.path()); + QString urlpath = url.path(); + /*if (urlpath.contains(':')) { + if (!urlpath.startsWith("file:")) urlpath.prepend("file:"); + char *tmp = decodedString(urlpath); + producer = new Mlt::Producer(*m_mltProfile, "avformat", tmp); + delete[] tmp; + } + else {*/ + char *tmp = decodedString(urlpath); producer = new Mlt::Producer(*m_mltProfile, tmp); delete[] tmp; + //} } if (xml.hasAttribute("out")) producer->set_in_and_out(xml.attribute("in").toInt(), xml.attribute("out").toInt()); @@ -503,7 +514,6 @@ if (frameNumber != 0) producer->seek(frameNumber); mlt_properties properties = MLT_PRODUCER_PROPERTIES(producer->get_producer()); - filePropertyMap["filename"] = url.path(); filePropertyMap["duration"] = QString::number(producer->get_playtime()); //kDebug() << "/////// PRODUCER: " << url.path() << " IS: " << producer.get_playtime(); Modified: branches/KDE4/src/titlewidget.cpp =================================================================== --- branches/KDE4/src/titlewidget.cpp 2008-10-03 13:50:11 UTC (rev 2428) +++ branches/KDE4/src/titlewidget.cpp 2008-10-04 00:45:22 UTC (rev 2429) @@ -29,6 +29,7 @@ #include <KDebug> #include <KGlobalSettings> #include <KFileDialog> +#include <KStandardDirs> #include "titlewidget.h" #include "kdenlivesettings.h" @@ -37,10 +38,11 @@ TitleWidget::TitleWidget(KUrl url, QString projectPath, Render *render, QWidget *parent): QDialog(parent), m_render(render), m_count(0), m_projectPath(projectPath) { setupUi(this); - //frame_properties-> setFont(KGlobalSettings::toolBarFont()); //toolBox->setFont(KGlobalSettings::toolBarFont()); frame_properties->setEnabled(false); + rect_properties->setFixedHeight(frame_properties->height() + 4); + text_properties->setFixedHeight(frame_properties->height() + 4); m_frameWidth = render->renderWidth(); m_frameHeight = render->renderHeight(); //connect(newTextButton, SIGNAL(clicked()), this, SLOT(slotNewText())); @@ -101,7 +103,7 @@ QHBoxLayout *layout = new QHBoxLayout; frame_toolbar->setLayout(layout); - + layout->setContentsMargins(2, 2, 2, 2); QToolBar *m_toolbar = new QToolBar("titleToolBar", this); m_buttonRect = m_toolbar->addAction(KIcon("kdenlive-insert-rect"), i18n("Add Rectangle")); @@ -170,21 +172,45 @@ graphicsView->scene()->addItem(m_frameBorder); initViewports(); - + QTimer::singleShot(500, this, SLOT(slotAdjustZoom())); graphicsView->show(); //graphicsView->setRenderHint(QPainter::Antialiasing); graphicsView->setInteractive(true); - QTimer::singleShot(500, this, SLOT(slotAdjustZoom())); //graphicsView->resize(400, 300); kDebug() << "// TITLE WIDGWT: " << graphicsView->viewport()->width() << "x" << graphicsView->viewport()->height(); toolBox->setItemEnabled(2, false); if (!url.isEmpty()) { m_count = m_titledocument.loadDocument(url, startViewport, endViewport) + 1; slotSelectTool(); - } else slotRectTool(); + } else { + slotRectTool(); + } } +//static +QStringList TitleWidget::getFreeTitleInfo(const KUrl &projectUrl) { + QStringList result; + QString titlePath = projectUrl.path() + "/titles/"; + KStandardDirs::makeDir(titlePath); + QString titleName = "title"; + int counter = 0; + QString path = titlePath + titleName + QString::number(counter).rightJustified(3, '0', false); + while (QFile::exists(path + ".png")) { + counter++; + path = titlePath + titleName + QString::number(counter).rightJustified(3, '0', false); + } + result.append(titleName + QString::number(counter).rightJustified(3, '0', false)); + result.append(path + ".png"); + return result; +} +QString TitleWidget::getTitleResourceFromName(const KUrl &projectUrl, const QString &titleName) { + QStringList result; + QString titlePath = projectUrl.path() + "/titles/"; + KStandardDirs::makeDir(titlePath); + return titlePath + titleName + ".png"; +} + //virtual void TitleWidget::resizeEvent(QResizeEvent * event) { //slotAdjustZoom(); @@ -286,8 +312,8 @@ } void TitleWidget::slotUpdateZoom(int pos) { - m_scene->setZoom((double) pos / 7); - zoom_label->setText("x" + QString::number((double) pos / 7, 'g', 2)); + m_scene->setZoom((double) pos / 100); + zoom_label->setText(QString::number(pos) + "%"); } void TitleWidget::slotZoom(bool up) { @@ -298,16 +324,18 @@ } void TitleWidget::slotAdjustZoom() { - double scalex = graphicsView->width() / (double)(m_frameWidth * 1.2); + /*double scalex = graphicsView->width() / (double)(m_frameWidth * 1.2); double scaley = graphicsView->height() / (double)(m_frameHeight * 1.2); if (scalex > scaley) scalex = scaley; - int zoompos = (int)(scalex * 7 + 0.5); + int zoompos = (int)(scalex * 7 + 0.5);*/ + graphicsView->fitInView(m_frameBorder, Qt::KeepAspectRatio); + int zoompos = graphicsView->matrix().m11() * 100; zoom_slider->setValue(zoompos); graphicsView->centerOn(m_frameBorder); } void TitleWidget::slotZoomOneToOne() { - zoom_slider->setValue(7); + zoom_slider->setValue(100); graphicsView->centerOn(m_frameBorder); } @@ -356,7 +384,7 @@ value_y->blockSignals(true); value_w->blockSignals(true); value_h->blockSignals(true); - kDebug() << "//////// SELECTION CHANGED; ITEMS: " << l.size(); + //kDebug() << "//////// SELECTION CHANGED; ITEMS: " << l.size(); if (l.size() == 1) { if ((l[0])->type() == 8) { rect_properties->setHidden(true); @@ -409,7 +437,7 @@ //toolBox->setItemEnabled(3, true); rectFAlpha->setValue(rec->pen().color().alpha()); rectBAlpha->setValue(rec->brush().color().alpha()); - kDebug() << rec->brush().color().alpha(); + //kDebug() << rec->brush().color().alpha(); QColor fcol = rec->pen().color(); QColor bcol = rec->brush().color(); //fcol.setAlpha(255); @@ -622,7 +650,7 @@ } void TitleWidget::setXml(QDomDocument doc) { - m_titledocument.loadFromXml(doc, startViewport, endViewport); + m_count = m_titledocument.loadFromXml(doc, startViewport, endViewport); slotSelectTool(); } @@ -631,7 +659,7 @@ pix.fill(Qt::transparent); QPainter painter(&pix); painter.setRenderHint(QPainter::Antialiasing); - m_scene->clearSelection(); + m_scene->clearTextSelection(); QPen framepen = m_frameBorder->pen(); m_frameBorder->setPen(Qt::NoPen); startViewport->setVisible(false); Modified: branches/KDE4/src/titlewidget.h =================================================================== --- branches/KDE4/src/titlewidget.h 2008-10-03 13:50:11 UTC (rev 2428) +++ branches/KDE4/src/titlewidget.h 2008-10-04 00:45:22 UTC (rev 2429) @@ -43,10 +43,13 @@ class TitleWidget : public QDialog , public Ui::TitleWidget_UI { Q_OBJECT + public: TitleWidget(KUrl url, QString projectPath, Render *render, QWidget *parent = 0); QDomDocument xml(); void setXml(QDomDocument doc); + static QStringList getFreeTitleInfo(const KUrl &projectUrl); + static QString getTitleResourceFromName(const KUrl &projectUrl, const QString &titleName); protected: virtual void resizeEvent(QResizeEvent * event); Modified: branches/KDE4/src/widgets/titlewidget_ui.ui =================================================================== --- branches/KDE4/src/widgets/titlewidget_ui.ui 2008-10-03 13:50:11 UTC (rev 2428) +++ branches/KDE4/src/widgets/titlewidget_ui.ui 2008-10-04 00:45:22 UTC (rev 2429) @@ -28,6 +28,9 @@ <enum>QFrame::Sunken</enum> </property> <layout class="QGridLayout" name="gridLayout_4" > + <property name="margin" > + <number>2</number> + </property> <item row="0" column="0" > <layout class="QHBoxLayout" name="horizontalLayout_3" > <item> @@ -120,6 +123,15 @@ <enum>QFrame::Sunken</enum> </property> <layout class="QGridLayout" name="gridLayout_5" > + <property name="leftMargin" > + <number>2</number> + </property> + <property name="topMargin" > + <number>2</number> + </property> + <property name="rightMargin" > + <number>2</number> + </property> <item row="0" column="0" > <layout class="QHBoxLayout" name="horizontalLayout_4" > <item> @@ -240,8 +252,8 @@ <rect> <x>0</x> <y>0</y> - <width>283</width> - <height>154</height> + <width>355</width> + <height>168</height> </rect> </property> <attribute name="label" > @@ -359,8 +371,8 @@ <rect> <x>0</x> <y>0</y> - <width>283</width> - <height>154</height> + <width>355</width> + <height>158</height> </rect> </property> <attribute name="label" > @@ -407,8 +419,8 @@ <rect> <x>0</x> <y>0</y> - <width>264</width> - <height>212</height> + <width>336</width> + <height>210</height> </rect> </property> <attribute name="label" > @@ -609,10 +621,10 @@ <number>1</number> </property> <property name="maximum" > - <number>10</number> + <number>150</number> </property> <property name="pageStep" > - <number>2</number> + <number>30</number> </property> <property name="orientation" > <enum>Qt::Horizontal</enum> @@ -671,6 +683,9 @@ <enum>QFrame::Raised</enum> </property> <layout class="QGridLayout" name="gridLayout" > + <property name="margin" > + <number>2</number> + </property> <item row="0" column="0" > <layout class="QHBoxLayout" name="positionLayout" > <item> @@ -780,6 +795,17 @@ </widget> </item> </layout> + <zorder>rect_properties</zorder> + <zorder>text_properties</zorder> + <zorder>splitter</zorder> + <zorder>buttonFitZoom</zorder> + <zorder>buttonRealSize</zorder> + <zorder>zoom_slider</zorder> + <zorder>zoom_label</zorder> + <zorder>displayBg</zorder> + <zorder>buttonBox</zorder> + <zorder>frame_properties</zorder> + <zorder>frame_toolbar</zorder> </widget> <customwidgets> <customwidget> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <j-...@us...> - 2008-10-04 22:12:17
|
Revision: 2431 http://kdenlive.svn.sourceforge.net/kdenlive/?rev=2431&view=rev Author: j-b-m Date: 2008-10-04 22:11:52 +0000 (Sat, 04 Oct 2008) Log Message: ----------- Fix group move (not perfect but no more crashes) Modified Paths: -------------- branches/KDE4/src/abstractgroupitem.cpp branches/KDE4/src/abstractgroupitem.h branches/KDE4/src/customtrackview.cpp Modified: branches/KDE4/src/abstractgroupitem.cpp =================================================================== --- branches/KDE4/src/abstractgroupitem.cpp 2008-10-04 12:28:15 UTC (rev 2430) +++ branches/KDE4/src/abstractgroupitem.cpp 2008-10-04 22:11:52 UTC (rev 2431) @@ -44,15 +44,16 @@ } -QPainterPath AbstractGroupItem::groupShape(QPointF offset) { +QPolygonF AbstractGroupItem::groupShape(QPointF offset) { QList<QGraphicsItem *> children = childItems(); - QPainterPath path; + QPolygonF path; for (int i = 0; i < children.count(); i++) { - QRectF r = children.at(i)->sceneBoundingRect(); - //kDebug()<<"// GROUP CHild: "<<r; - //r.translate(offset); - path.addRect(r); + if (children.at(i)->type() == AVWIDGET) { + QPolygonF r = QPolygonF(children.at(i)->sceneBoundingRect()); + path = path.united(r); + } } + path.translate(offset); return path; } @@ -79,27 +80,53 @@ if (change == ItemPositionChange && scene()) { // calculate new position. QPointF newPos = value.toPointF(); - QPainterPath sceneShape = groupShape(newPos); QPointF start = sceneBoundingRect().topLeft(); - QPointF sc = mapToScene(pos()); int posx = start.x() + newPos.x(); //projectScene()->getSnapPointForPos(start.x() + sc.x(), KdenliveSettings::snaptopoints()); - //int startx = projectScene()->getSnapPointForPos(start.x(), false); - //int startx = projectScene()->getSnapPointForPos(start.x(), false); - kDebug() << "------------------------------------"; - kDebug() << "BRect: " << start.x() << "diff: " << newPos.x() << ",mapd: " << start.x() - sc.x(); - return newPos; - //kDebug()<<"BR: "<<start.x()<<",NP: "<<newPos.x()<<",MAPD: "<<sc.x()<<",POS: "<<pos().x(); - if (start.x() <= 0) { - //kDebug()<<"/// GOING UNDER 0, POS: "<<posx<<", ADJUSTED: items.at(i)->sceneBoundingRect(); - return pos(); + + int startTrack = (start.y()) / KdenliveSettings::trackheight(); + int newTrack = (start.y() + newPos.y()) / KdenliveSettings::trackheight(); + //kDebug()<<"// GROUP NEW TRACK: "<<newTrack<<", START TRACK: "<<startTrack; + newTrack = qMin(newTrack, projectScene()->tracksCount() - 1); + newTrack = qMax(newTrack, 0); + newPos.setY((int)((newTrack - startTrack) * KdenliveSettings::trackheight())); + + //kDebug() << "------------------------------------GRUOP MOVE"; + + if (start.x() + newPos.x() - pos().x() < 0) { + // If group goes below 0, adjust position to 0 + return QPointF(pos().x() - start.x(), pos().y()); } + + QPolygonF sceneShape = groupShape(newPos - pos()); + QList<QGraphicsItem*> collindingItems = scene()->items(sceneShape, Qt::IntersectsItemShape); + QList<QGraphicsItem *> children = childItems(); + for (int i = 0; i < children.count(); i++) { + collindingItems.removeAll(children.at(i)); + } + if (collindingItems.isEmpty()) return newPos; + else { + for (int i = 0; i < collindingItems.count(); i++) { + QGraphicsItem *collision = collindingItems.at(i); + if (collision->type() == AVWIDGET) { + // Collision + return pos(); + //TODO: improve movement when collision happens + /*if (startTrack != newTrack) return pos(); + if (collision->pos().x() > pos().x()) { + return QPointF(collision->sceneBoundingRect().x() - sceneBoundingRect().width() + pos().x() - start.x() - 1, newPos.y()); + }*/ + } + } + return newPos; + } + //else posx -= startx; //posx = qMax(posx, 0); - newPos.setX(posx); + //newPos.setX(posx); //kDebug()<<"Y POS: "<<start.y() + newPos.y()<<"SCN MP: "<<sc; - int newTrack = (start.y() + newPos.y()) / KdenliveSettings::trackheight(); + /*int newTrack = (start.y() + newPos.y()) / KdenliveSettings::trackheight(); int oldTrack = (start.y() + pos().y()) / KdenliveSettings::trackheight(); - newPos.setY((newTrack) * KdenliveSettings::trackheight() - start.y() + 1); + newPos.setY((newTrack) * KdenliveSettings::trackheight() - start.y() + 1);*/ //if (start.y() + newPos.y() < 1) newTrack = oldTrack; @@ -110,13 +137,7 @@ QList<QGraphicsItem*> items = scene()->items(sceneShape, Qt::IntersectsItemShape); - QList<QGraphicsItem *> children = childItems(); - for (int i = 0; i < children.count(); i++) { - items.removeAll(children.at(i)); - } - - if (!items.isEmpty()) { for (int i = 0; i < items.count(); i++) { if (items.at(i)->type() == AVWIDGET) { Modified: branches/KDE4/src/abstractgroupitem.h =================================================================== --- branches/KDE4/src/abstractgroupitem.h 2008-10-04 12:28:15 UTC (rev 2430) +++ branches/KDE4/src/abstractgroupitem.h 2008-10-04 22:11:52 UTC (rev 2431) @@ -40,7 +40,7 @@ virtual void paint(QPainter *, const QStyleOptionGraphicsItem *, QWidget *); private: - QPainterPath groupShape(QPointF); + QPolygonF groupShape(QPointF); void fixItemRect(); double m_fps; }; Modified: branches/KDE4/src/customtrackview.cpp =================================================================== --- branches/KDE4/src/customtrackview.cpp 2008-10-04 12:28:15 UTC (rev 2430) +++ branches/KDE4/src/customtrackview.cpp 2008-10-04 22:11:52 UTC (rev 2431) @@ -522,7 +522,10 @@ if (m_dragItem) { if (!m_dragItem->isSelected()) { m_scene->clearSelection(); - if (m_selectionGroup) scene()->destroyItemGroup(m_selectionGroup); + if (m_selectionGroup) { + scene()->destroyItemGroup(m_selectionGroup); + m_selectionGroup = NULL; + } m_dragItem->setSelected(true); } } @@ -536,7 +539,10 @@ // No item under click if (m_dragItem == NULL) { - if (m_selectionGroup) scene()->destroyItemGroup(m_selectionGroup); + if (m_selectionGroup) { + scene()->destroyItemGroup(m_selectionGroup); + m_selectionGroup = NULL; + } setCursor(Qt::ArrowCursor); m_scene->clearSelection(); setCursorPos((int)(mapToScene(event->x(), 0).x())); @@ -564,14 +570,14 @@ if (m_dragItem && m_dragItem->type() == AVWIDGET) emit clipItemSelected((ClipItem*) m_dragItem); else emit clipItemSelected(NULL); - if (m_dragItem && m_operationMode == NONE) QGraphicsView::mousePressEvent(event); - if (m_selectionGroup) { // delete selection group scene()->destroyItemGroup(m_selectionGroup); m_selectionGroup = NULL; } + if (m_dragItem && m_operationMode == NONE) QGraphicsView::mousePressEvent(event); + QList<QGraphicsItem *> selection = m_scene->selectedItems(); if (selection.count() > 1) { m_selectionGroup = new AbstractGroupItem(m_document->fps()); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <j-...@us...> - 2008-10-05 10:28:33
|
Revision: 2432 http://kdenlive.svn.sourceforge.net/kdenlive/?rev=2432&view=rev Author: j-b-m Date: 2008-10-05 09:33:31 +0000 (Sun, 05 Oct 2008) Log Message: ----------- Disable the "Add custom effect" submenu since this feature is not implemented yet Modified Paths: -------------- branches/KDE4/src/kdenliveui.rc branches/KDE4/src/mainwindow.cpp Modified: branches/KDE4/src/kdenliveui.rc =================================================================== --- branches/KDE4/src/kdenliveui.rc 2008-10-04 22:11:52 UTC (rev 2431) +++ branches/KDE4/src/kdenliveui.rc 2008-10-05 09:33:31 UTC (rev 2432) @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE kpartgui SYSTEM "kpartgui.dtd"> -<gui name="kdenlive" version="22"> +<gui name="kdenlive" version="23"> <ToolBar name="extraToolBar" > <text>Extra Toolbar</text> <Action name="project_render" /> @@ -44,8 +44,8 @@ </Menu> <Menu name="audio_effects_menu" ><text>Add Audio Effect</text> </Menu> - <Menu name="custom_effects_menu" ><text>Add Custom Effect</text> - </Menu> + <!-- <Menu name="custom_effects_menu" ><text>Add Custom Effect</text> + </Menu> --> <Separator /> <Action name="show_video_thumbs" /> <Action name="show_audio_thumbs" /> Modified: branches/KDE4/src/mainwindow.cpp =================================================================== --- branches/KDE4/src/mainwindow.cpp 2008-10-04 22:11:52 UTC (rev 2431) +++ branches/KDE4/src/mainwindow.cpp 2008-10-05 09:33:31 UTC (rev 2432) @@ -262,7 +262,8 @@ m_timelineContextClipMenu->addMenu(transitionsMenu); m_timelineContextClipMenu->addMenu(videoEffectsMenu); m_timelineContextClipMenu->addMenu(audioEffectsMenu); - m_timelineContextClipMenu->addMenu(m_customEffectsMenu); + //TODO: re-enable custom effects menu when it is implemented + //m_timelineContextClipMenu->addMenu(m_customEffectsMenu); m_timelineContextTransitionMenu->addAction(actionCollection()->action("delete_timeline_clip")); m_timelineContextTransitionMenu->addAction(actionCollection()->action(KStandardAction::name(KStandardAction::Copy))); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <j-...@us...> - 2008-10-05 14:20:01
|
Revision: 2434 http://kdenlive.svn.sourceforge.net/kdenlive/?rev=2434&view=rev Author: j-b-m Date: 2008-10-05 14:17:20 +0000 (Sun, 05 Oct 2008) Log Message: ----------- Use selected SDL video driver for record monitor Modified Paths: -------------- branches/KDE4/src/mainwindow.cpp branches/KDE4/src/recmonitor.cpp Modified: branches/KDE4/src/mainwindow.cpp =================================================================== --- branches/KDE4/src/mainwindow.cpp 2008-10-05 10:48:53 UTC (rev 2433) +++ branches/KDE4/src/mainwindow.cpp 2008-10-05 14:17:20 UTC (rev 2434) @@ -224,9 +224,9 @@ m_customEffectsMenu = static_cast<QMenu*>(factory()->container("custom_effects_menu", this)); effects = customEffects.effectNames(); if (effects.isEmpty()) { - action = new QAction(i18n("No Custom Effects"), this); - action->setEnabled(false); - m_customEffectsMenu->addAction(action); + action = new QAction(i18n("No Custom Effects"), this); + action->setEnabled(false); + m_customEffectsMenu->addAction(action); } foreach(const QString &name, effects) { action = new QAction(name, this); @@ -346,9 +346,9 @@ const QStringList effects = customEffects.effectNames(); QAction *action; if (effects.isEmpty()) { - action = new QAction(i18n("No Custom Effects"), this); - action->setEnabled(false); - m_customEffectsMenu->addAction(action); + action = new QAction(i18n("No Custom Effects"), this); + action->setEnabled(false); + m_customEffectsMenu->addAction(action); } foreach(const QString &name, effects) { action = new QAction(name, this); Modified: branches/KDE4/src/recmonitor.cpp =================================================================== --- branches/KDE4/src/recmonitor.cpp 2008-10-05 10:48:53 UTC (rev 2433) +++ branches/KDE4/src/recmonitor.cpp 2008-10-05 14:17:20 UTC (rev 2434) @@ -90,6 +90,16 @@ QStringList env = QProcess::systemEnvironment(); env << "SDL_WINDOWID=" + QString::number(ui.video_frame->winId()); + + QString videoDriver = KdenliveSettings::videodrivername(); + if (!videoDriver.isEmpty()) { + if (videoDriver == "x11_noaccel") { + env << "SDL_VIDEO_YUV_HWACCEL=0"; + env << "SDL_VIDEODRIVER=x11"; + } else env << "SDL_VIDEODRIVER=" + videoDriver; + } + setenv("SDL_VIDEO_ALLOW_SCREENSAVER", "1", 1); + displayProcess->setEnvironment(env); if (KdenliveSettings::video4capture().isEmpty()) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <j-...@us...> - 2008-10-06 16:30:04
|
Revision: 2436 http://kdenlive.svn.sourceforge.net/kdenlive/?rev=2436&view=rev Author: j-b-m Date: 2008-10-06 15:57:20 +0000 (Mon, 06 Oct 2008) Log Message: ----------- Fix effect stack "add new effect" menu, make custom effects go in the correct submenu Modified Paths: -------------- branches/KDE4/src/effectstackview.cpp branches/KDE4/src/effectstackview.h branches/KDE4/src/mainwindow.cpp branches/KDE4/src/widgets/effectstack_ui.ui Modified: branches/KDE4/src/effectstackview.cpp =================================================================== --- branches/KDE4/src/effectstackview.cpp 2008-10-06 15:14:54 UTC (rev 2435) +++ branches/KDE4/src/effectstackview.cpp 2008-10-06 15:57:20 UTC (rev 2436) @@ -58,7 +58,6 @@ connect(ui.effectlist, SIGNAL(itemSelectionChanged()), this , SLOT(slotItemSelectionChanged())); connect(ui.effectlist, SIGNAL(itemChanged(QListWidgetItem *)), this , SLOT(slotItemChanged(QListWidgetItem *))); - connect(ui.buttonNew, SIGNAL(clicked()), this, SLOT(slotNewEffect())); connect(ui.buttonUp, SIGNAL(clicked()), this, SLOT(slotItemUp())); connect(ui.buttonDown, SIGNAL(clicked()), this, SLOT(slotItemDown())); connect(ui.buttonDel, SIGNAL(clicked()), this, SLOT(slotItemDel())); @@ -74,6 +73,10 @@ setEnabled(false); } +void EffectStackView::setMenu(QMenu *menu) { + ui.buttonNew->setMenu(menu); +} + void EffectStackView::slotSaveEffect() { QString name = QInputDialog::getText(this, i18n("Save Effect"), i18n("Name for saved effect: ")); if (name.isEmpty()) return; @@ -88,6 +91,7 @@ effect = doc.firstChild().toElement(); effect.removeAttribute("kdenlive_ix"); effect.setAttribute("id", name); + effect.setAttribute("type", "custom"); QDomElement effectname = effect.firstChildElement("name"); effect.removeChild(effectname); effectname = doc.createElement("name"); @@ -243,46 +247,7 @@ } } -void EffectStackView::slotNewEffect() { - int ix = ui.effectlist->currentRow(); - QMenu *displayMenu = new QMenu(this); - displayMenu->setTitle("Filters"); - foreach(const QString &type, effectLists.keys()) { - QAction *a = new QAction(type, displayMenu); - EffectsList *list = effectLists[type]; - QMenu *parts = new QMenu(type, displayMenu); - parts->setTitle(type); - foreach(const QString &name, list->effectNames()) { - QAction *entry = new QAction(name, parts); - entry->setData(name); - entry->setToolTip(list->getInfo(name)); - entry->setStatusTip(list->getInfo(name)); - parts->addAction(entry); - //QAction - } - displayMenu->addMenu(parts); - - } - - QAction *result = displayMenu->exec(mapToGlobal(ui.buttonNew->pos() + ui.buttonNew->rect().bottomRight())); - - if (result) { - //TODO effects.append(result->data().toString()); - foreach(const EffectsList *e, effectLists.values()) { - QDomElement dom = e->getEffectByName(result->data().toString()); - if (clipref) - clipref->addEffect(dom); - slotClipItemSelected(clipref); - } - - setupListView(ix); - //kDebug()<< result->data(); - } - delete displayMenu; - -} - void EffectStackView::raiseWindow(QWidget* dock) { if (clipref && dock) dock->raise(); Modified: branches/KDE4/src/effectstackview.h =================================================================== --- branches/KDE4/src/effectstackview.h 2008-10-06 15:14:54 UTC (rev 2435) +++ branches/KDE4/src/effectstackview.h 2008-10-06 15:57:20 UTC (rev 2436) @@ -30,6 +30,7 @@ EffectStackView(QWidget *parent = 0); void raiseWindow(QWidget*); void clear(); + void setMenu(QMenu *menu); private: Ui::EffectStack_UI ui; @@ -48,7 +49,6 @@ void slotItemUp(); void slotItemDown(); void slotItemDel(); - void slotNewEffect(); void slotResetEffect(); void slotItemChanged(QListWidgetItem *item); void slotSaveEffect(); Modified: branches/KDE4/src/mainwindow.cpp =================================================================== --- branches/KDE4/src/mainwindow.cpp 2008-10-06 15:14:54 UTC (rev 2435) +++ branches/KDE4/src/mainwindow.cpp 2008-10-06 15:57:20 UTC (rev 2436) @@ -232,6 +232,13 @@ m_customEffectsMenu->addAction(action); } + QMenu *newEffect = new QMenu(this); + newEffect->addMenu(videoEffectsMenu); + newEffect->addMenu(audioEffectsMenu); + newEffect->addMenu(m_customEffectsMenu); + effectStack->setMenu(newEffect); + + QMenu *viewMenu = static_cast<QMenu*>(factory()->container("dockwindows", this)); const QList<QAction *> viewActions = createPopupMenu()->actions(); viewMenu->insertActions(NULL, viewActions); Modified: branches/KDE4/src/widgets/effectstack_ui.ui =================================================================== --- branches/KDE4/src/widgets/effectstack_ui.ui 2008-10-06 15:14:54 UTC (rev 2435) +++ branches/KDE4/src/widgets/effectstack_ui.ui 2008-10-06 15:57:20 UTC (rev 2436) @@ -52,6 +52,9 @@ <property name="text" > <string>N</string> </property> + <property name="popupMode" > + <enum>QToolButton::InstantPopup</enum> + </property> </widget> </item> <item> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <j-...@us...> - 2008-10-07 10:40:38
|
Revision: 2437 http://kdenlive.svn.sourceforge.net/kdenlive/?rev=2437&view=rev Author: j-b-m Date: 2008-10-07 10:36:17 +0000 (Tue, 07 Oct 2008) Log Message: ----------- Fix crash with copied clips Modified Paths: -------------- branches/KDE4/src/abstractclipitem.cpp branches/KDE4/src/abstractgroupitem.cpp branches/KDE4/src/clipitem.cpp branches/KDE4/src/customtrackscene.cpp branches/KDE4/src/customtrackscene.h branches/KDE4/src/customtrackview.cpp Modified: branches/KDE4/src/abstractclipitem.cpp =================================================================== --- branches/KDE4/src/abstractclipitem.cpp 2008-10-06 15:57:20 UTC (rev 2436) +++ branches/KDE4/src/abstractclipitem.cpp 2008-10-07 10:36:17 UTC (rev 2437) @@ -349,5 +349,6 @@ } CustomTrackScene* AbstractClipItem::projectScene() { - return static_cast <CustomTrackScene*>(scene()); + if (scene()) return static_cast <CustomTrackScene*>(scene()); + return NULL; } Modified: branches/KDE4/src/abstractgroupitem.cpp =================================================================== --- branches/KDE4/src/abstractgroupitem.cpp 2008-10-06 15:57:20 UTC (rev 2436) +++ branches/KDE4/src/abstractgroupitem.cpp 2008-10-07 10:36:17 UTC (rev 2437) @@ -40,7 +40,8 @@ } CustomTrackScene* AbstractGroupItem::projectScene() { - return static_cast <CustomTrackScene*>(scene()); + if (scene()) return static_cast <CustomTrackScene*>(scene()); + return NULL; } Modified: branches/KDE4/src/clipitem.cpp =================================================================== --- branches/KDE4/src/clipitem.cpp 2008-10-06 15:57:20 UTC (rev 2436) +++ branches/KDE4/src/clipitem.cpp 2008-10-07 10:36:17 UTC (rev 2437) @@ -41,7 +41,7 @@ ClipItem::ClipItem(DocClipBase *clip, ItemInfo info, double fps) - : AbstractClipItem(info, QRectF(), fps), m_clip(clip), m_resizeMode(NONE), m_grabPoint(0), m_maxTrack(0), m_hasThumbs(false), startThumbTimer(NULL), endThumbTimer(NULL), m_effectsCounter(1), audioThumbWasDrawn(false), m_opacity(1.0), m_timeLine(0), m_startThumbRequested(false), m_endThumbRequested(false), m_startFade(0), m_endFade(0), m_hover(false), m_selectedEffect(-1), m_speed(1.0), framePixelWidth(0) { + : AbstractClipItem(info, QRectF(), fps), m_clip(clip), m_resizeMode(NONE), m_grabPoint(0), m_maxTrack(0), m_hasThumbs(false), startThumbTimer(NULL), endThumbTimer(NULL), m_effectsCounter(1), audioThumbWasDrawn(false), m_opacity(1.0), m_timeLine(0), m_startThumbRequested(false), m_endThumbRequested(false), m_startFade(0), m_endFade(0), m_hover(false), m_selectedEffect(-1), m_speed(1.0), framePixelWidth(0), m_startPix(QPixmap()), m_endPix(QPixmap()) { setRect(0, 0, (info.endPos - info.startPos).frames(fps) - 0.02, (qreal)(KdenliveSettings::trackheight() - 2)); setPos((qreal) info.startPos.frames(fps), (qreal)(info.track * KdenliveSettings::trackheight()) + 1); @@ -336,6 +336,7 @@ } void ClipItem::slotThumbReady(int frame, QPixmap pix) { + if (scene() == NULL) return; QRectF r = sceneBoundingRect(); double width = m_startPix.width() / projectScene()->scale(); if (m_startThumbRequested && frame == m_cropStart.frames(m_fps)) { Modified: branches/KDE4/src/customtrackscene.cpp =================================================================== --- branches/KDE4/src/customtrackscene.cpp 2008-10-06 15:57:20 UTC (rev 2436) +++ branches/KDE4/src/customtrackscene.cpp 2008-10-07 10:36:17 UTC (rev 2437) @@ -72,11 +72,11 @@ m_scale = scale; } -double CustomTrackScene::scale() { +double CustomTrackScene::scale() const { return m_scale; } -int CustomTrackScene::tracksCount() { +int CustomTrackScene::tracksCount() const { return m_tracksList.count(); } Modified: branches/KDE4/src/customtrackscene.h =================================================================== --- branches/KDE4/src/customtrackscene.h 2008-10-06 15:57:20 UTC (rev 2436) +++ branches/KDE4/src/customtrackscene.h 2008-10-07 10:36:17 UTC (rev 2437) @@ -43,9 +43,9 @@ GenTime nextSnapPoint(GenTime pos); double getSnapPointForPos(double pos, bool doSnap = true); void setScale(double scale); - double scale(); + double scale() const; QList <TrackInfo> m_tracksList; - int tracksCount(); + int tracksCount() const; QPixmap m_transitionPixmap; private: Modified: branches/KDE4/src/customtrackview.cpp =================================================================== --- branches/KDE4/src/customtrackview.cpp 2008-10-06 15:57:20 UTC (rev 2436) +++ branches/KDE4/src/customtrackview.cpp 2008-10-07 10:36:17 UTC (rev 2437) @@ -72,7 +72,7 @@ // const int duration = animate ? 1500 : 1; CustomTrackView::CustomTrackView(KdenliveDoc *doc, CustomTrackScene* projectscene, QWidget *parent) - : QGraphicsView(projectscene, parent), m_scene(projectscene), m_cursorPos(0), m_dropItem(NULL), m_cursorLine(NULL), m_operationMode(NONE), m_dragItem(NULL), m_visualTip(NULL), m_moveOpMode(NONE), m_animation(NULL), m_projectDuration(0), m_clickPoint(QPoint()), m_document(doc), m_autoScroll(KdenliveSettings::autoscroll()), m_tracksHeight(KdenliveSettings::trackheight()), m_tool(SELECTTOOL), m_dragGuide(NULL), m_findIndex(0), m_menuPosition(QPoint()), m_blockRefresh(false), m_selectionGroup(NULL), m_selectedTrack(0) { + : QGraphicsView(projectscene, parent), m_scene(projectscene), m_cursorPos(0), m_dropItem(NULL), m_cursorLine(NULL), m_operationMode(NONE), m_dragItem(NULL), m_visualTip(NULL), m_moveOpMode(NONE), m_animation(NULL), m_projectDuration(0), m_clickPoint(QPoint()), m_document(doc), m_autoScroll(KdenliveSettings::autoscroll()), m_tracksHeight(KdenliveSettings::trackheight()), m_tool(SELECTTOOL), m_dragGuide(NULL), m_findIndex(0), m_menuPosition(QPoint()), m_blockRefresh(false), m_selectionGroup(NULL), m_selectedTrack(0), m_copiedItems(QList<AbstractClipItem *> ()), m_selectedClipList(QList<AbstractClipItem *> ()) { if (doc) m_commandStack = doc->commandStack(); else m_commandStack == NULL; setMouseTracking(true); @@ -1469,6 +1469,10 @@ void CustomTrackView::addClip(QDomElement xml, const QString &clipId, ItemInfo info, EffectsList effects) { DocClipBase *baseclip = m_document->clipManager()->getClipById(clipId); + if (baseclip == NULL) { + emit displayMessage(i18n("No clip copied"), ErrorMessage); + return; + } ClipItem *item = new ClipItem(baseclip, info, m_document->fps()); item->setEffectList(effects); scene()->addItem(item); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <j-...@us...> - 2008-10-10 00:13:11
|
Revision: 2441 http://kdenlive.svn.sourceforge.net/kdenlive/?rev=2441&view=rev Author: j-b-m Date: 2008-10-10 00:13:05 +0000 (Fri, 10 Oct 2008) Log Message: ----------- Fix group move (in progress) Modified Paths: -------------- branches/KDE4/src/abstractgroupitem.cpp branches/KDE4/src/abstractgroupitem.h branches/KDE4/src/customtrackview.cpp branches/KDE4/src/customtrackview.h branches/KDE4/src/kdenlivedoc.cpp Modified: branches/KDE4/src/abstractgroupitem.cpp =================================================================== --- branches/KDE4/src/abstractgroupitem.cpp 2008-10-09 23:57:27 UTC (rev 2440) +++ branches/KDE4/src/abstractgroupitem.cpp 2008-10-10 00:13:05 UTC (rev 2441) @@ -39,6 +39,10 @@ return GROUPWIDGET; } +const int AbstractGroupItem::track() const { + return (int)(scenePos().y() / KdenliveSettings::trackheight()); +} + CustomTrackScene* AbstractGroupItem::projectScene() { if (scene()) return static_cast <CustomTrackScene*>(scene()); return NULL; @@ -81,15 +85,20 @@ if (change == ItemPositionChange && scene()) { // calculate new position. QPointF newPos = value.toPointF(); - QPointF start = sceneBoundingRect().topLeft(); + int xpos = projectScene()->getSnapPointForPos((int) newPos.x(), KdenliveSettings::snaptopoints()); + xpos = qMax(xpos, 0); + newPos.setX(xpos); + + //kDebug()<<"// GRP MOVE: "<<pos().y()<<"->"<<newPos.y(); + QPointF start = pos();//sceneBoundingRect().topLeft(); int posx = start.x() + newPos.x(); //projectScene()->getSnapPointForPos(start.x() + sc.x(), KdenliveSettings::snaptopoints()); - int startTrack = (start.y()) / KdenliveSettings::trackheight(); - int newTrack = (start.y() + newPos.y()) / KdenliveSettings::trackheight(); - //kDebug()<<"// GROUP NEW TRACK: "<<newTrack<<", START TRACK: "<<startTrack; - newTrack = qMin(newTrack, projectScene()->tracksCount() - 1); + int startTrack = (start.y() + KdenliveSettings::trackheight() / 2) / KdenliveSettings::trackheight(); + int newTrack = (newPos.y()) / KdenliveSettings::trackheight(); + //kDebug()<<"// GROUP NEW T:"<<newTrack<<",START T:"<<startTrack<<",MAX:"<<projectScene()->tracksCount() - 1; + newTrack = qMin(newTrack, projectScene()->tracksCount() - (int)(boundingRect().height() + 5) / KdenliveSettings::trackheight()); newTrack = qMax(newTrack, 0); - newPos.setY((int)((newTrack - startTrack) * KdenliveSettings::trackheight())); + newPos.setY((int)((newTrack) * KdenliveSettings::trackheight())); //kDebug() << "------------------------------------GRUOP MOVE"; Modified: branches/KDE4/src/abstractgroupitem.h =================================================================== --- branches/KDE4/src/abstractgroupitem.h 2008-10-09 23:57:27 UTC (rev 2440) +++ branches/KDE4/src/abstractgroupitem.h 2008-10-10 00:13:05 UTC (rev 2441) @@ -34,6 +34,7 @@ virtual int type() const; CustomTrackScene* projectScene(); void addItem(QGraphicsItem * item); + const int track() const; protected: virtual QVariant itemChange(GraphicsItemChange change, const QVariant &value); Modified: branches/KDE4/src/customtrackview.cpp =================================================================== --- branches/KDE4/src/customtrackview.cpp 2008-10-09 23:57:27 UTC (rev 2440) +++ branches/KDE4/src/customtrackview.cpp 2008-10-10 00:13:05 UTC (rev 2441) @@ -72,7 +72,7 @@ // const int duration = animate ? 1500 : 1; CustomTrackView::CustomTrackView(KdenliveDoc *doc, CustomTrackScene* projectscene, QWidget *parent) - : QGraphicsView(projectscene, parent), m_scene(projectscene), m_cursorPos(0), m_dropItem(NULL), m_cursorLine(NULL), m_operationMode(NONE), m_dragItem(NULL), m_visualTip(NULL), m_moveOpMode(NONE), m_animation(NULL), m_projectDuration(0), m_clickPoint(QPoint()), m_document(doc), m_autoScroll(KdenliveSettings::autoscroll()), m_tracksHeight(KdenliveSettings::trackheight()), m_tool(SELECTTOOL), m_dragGuide(NULL), m_findIndex(0), m_menuPosition(QPoint()), m_blockRefresh(false), m_selectionGroup(NULL), m_selectedTrack(0), m_copiedItems(QList<AbstractClipItem *> ()), m_selectedClipList(QList<AbstractClipItem *> ()) { + : QGraphicsView(projectscene, parent), m_scene(projectscene), m_cursorPos(0), m_cursorLine(NULL), m_operationMode(NONE), m_dragItem(NULL), m_visualTip(NULL), m_moveOpMode(NONE), m_animation(NULL), m_projectDuration(0), m_clickPoint(QPoint()), m_document(doc), m_autoScroll(KdenliveSettings::autoscroll()), m_tracksHeight(KdenliveSettings::trackheight()), m_tool(SELECTTOOL), m_dragGuide(NULL), m_findIndex(0), m_menuPosition(QPoint()), m_blockRefresh(false), m_selectionGroup(NULL), m_selectedTrack(0), m_copiedItems(QList<AbstractClipItem *> ()) { if (doc) m_commandStack = doc->commandStack(); else m_commandStack == NULL; setMouseTracking(true); @@ -583,9 +583,16 @@ m_selectionGroup = new AbstractGroupItem(m_document->fps()); scene()->addItem(m_selectionGroup); for (int i = 0; i < selection.count(); i++) { - if (selection.at(i)->type() == AVWIDGET) - m_selectionGroup->addItem(selection.at(i)); + if (selection.at(i)->type() == AVWIDGET || selection.at(i)->type() == TRANSITIONWIDGET) + m_selectionGroup->addToGroup(selection.at(i)); } + QPointF top = m_selectionGroup->boundingRect().topLeft(); + const int width = m_selectionGroup->boundingRect().width(); + const int height = m_selectionGroup->boundingRect().height(); + m_selectionGroup->setPos(top); + m_selectionGroup->translate(-top.x(), -top.y() + 1); + m_selectionGroupInfo.startPos = GenTime(m_selectionGroup->scenePos().x(), m_document->fps()); + m_selectionGroupInfo.track = m_selectionGroup->track(); } m_clickPoint = QPoint((int)(mapToScene(event->pos()).x() - m_dragItem->startPos().frames(m_document->fps())), (int)(event->pos().y() - m_dragItem->pos().y())); @@ -756,21 +763,46 @@ void CustomTrackView::dragEnterEvent(QDragEnterEvent * event) { if (event->mimeData()->hasFormat("kdenlive/clip")) { + if (m_selectionGroup) { + scene()->destroyItemGroup(m_selectionGroup); + m_selectionGroup = NULL; + } QStringList list = QString(event->mimeData()->data("kdenlive/clip")).split(";"); - kDebug() << "DRAG ENTER EVENT, DATA: " << list; + m_selectionGroup = new AbstractGroupItem(m_document->fps()); + QPoint pos = QPoint(); DocClipBase *clip = m_document->getBaseClip(list.at(0)); if (clip == NULL) kDebug() << " WARNING))))))))) CLIP NOT FOUND : " << list.at(0); - addItem(clip, event->pos(), QPoint(list.at(1).toInt(), list.at(2).toInt())); + ItemInfo info; + info.startPos = GenTime(pos.x(), m_document->fps()); + info.cropStart = GenTime(list.at(1).toInt(), m_document->fps()); + info.endPos = info.startPos + GenTime(list.at(2).toInt() - list.at(1).toInt(), m_document->fps()); + info.track = (int)(pos.y() / m_tracksHeight); + ClipItem *item = new ClipItem(clip, info, m_document->fps()); + m_selectionGroup->addToGroup(item); + scene()->addItem(m_selectionGroup); event->acceptProposedAction(); } else if (event->mimeData()->hasFormat("kdenlive/producerslist")) { - kDebug() << "/////////////// DRAG ENTERED, TEXT: " << event->mimeData()->data("kdenlive/producerslist"); QStringList ids = QString(event->mimeData()->data("kdenlive/producerslist")).split(";"); - //TODO: drop of several clips + m_scene->clearSelection(); + if (m_selectionGroup) { + scene()->destroyItemGroup(m_selectionGroup); + m_selectionGroup = NULL; + } + + m_selectionGroup = new AbstractGroupItem(m_document->fps()); + QPoint pos = QPoint(); for (int i = 0; i < ids.size(); ++i) { + DocClipBase *clip = m_document->getBaseClip(ids.at(i)); + if (clip == NULL) kDebug() << " WARNING))))))))) CLIP NOT FOUND : " << ids.at(i); + ItemInfo info; + info.startPos = GenTime(pos.x(), m_document->fps()); + info.endPos = info.startPos + clip->duration(); + info.track = (int)(pos.y() / m_tracksHeight); + ClipItem *item = new ClipItem(clip, info, m_document->fps()); + pos.setX(pos.x() + clip->duration().frames(m_document->fps())); + m_selectionGroup->addToGroup(item); } - DocClipBase *clip = m_document->getBaseClip(ids.at(0)); - if (clip == NULL) kDebug() << " WARNING))))))))) CLIP NOT FOUND : " << ids.at(0); - addItem(clip, event->pos()); + scene()->addItem(m_selectionGroup); event->acceptProposedAction(); } else QGraphicsView::dragEnterEvent(event); } @@ -1006,34 +1038,13 @@ m_document->setModified(true); } -void CustomTrackView::addItem(DocClipBase *clip, QPoint pos) { - ItemInfo info; - info.startPos = GenTime((int)(mapToScene(pos).x()), m_document->fps()); - info.endPos = info.startPos + clip->duration(); - info.track = (int)(pos.y() / m_tracksHeight); - kDebug() << "------------ ADDING CLIP ITEM----: " << info.startPos.frames(25) << ", " << info.endPos.frames(25) << ", " << info.track; - m_dropItem = new ClipItem(clip, info, m_document->fps()); - scene()->addItem(m_dropItem); -} - -void CustomTrackView::addItem(DocClipBase *clip, QPoint pos, QPoint zone) { - ItemInfo info; - info.startPos = GenTime((int)(mapToScene(pos).x()), m_document->fps()); - info.cropStart = GenTime(zone.x(), m_document->fps()); - info.endPos = info.startPos + GenTime(zone.y() - zone.x(), m_document->fps()); - info.track = (int)(pos.y() / m_tracksHeight); - kDebug() << "------------ ADDING CLIP ZONE ITEM----: " << zone; - m_dropItem = new ClipItem(clip, info, m_document->fps()); - scene()->addItem(m_dropItem); -} - - void CustomTrackView::dragMoveEvent(QDragMoveEvent * event) { event->setDropAction(Qt::IgnoreAction); - if (m_dropItem) { - int track = (int)(mapToScene(event->pos()).y() / m_tracksHeight); - int pos = mapToScene(event->pos()).x(); - m_dropItem->setPos(pos, track * m_tracksHeight + 1); + const int track = (int)(mapToScene(event->pos()).y() / m_tracksHeight); + const int pos = mapToScene(event->pos()).x(); + kDebug() << "// DRAG MOVE TO TRACK: " << track; + if (m_selectionGroup) { + m_selectionGroup->setPos(pos, event->pos().y()/*track * m_tracksHeight + 1 - (int) m_selectionGroup->pos().y()*/); event->setDropAction(Qt::MoveAction); if (event->mimeData()->hasFormat("kdenlive/producerslist") || event->mimeData()->hasFormat("kdenlive/clip")) { event->acceptProposedAction(); @@ -1044,29 +1055,36 @@ } void CustomTrackView::dragLeaveEvent(QDragLeaveEvent * event) { - if (m_dropItem) { - delete m_dropItem; - m_dropItem = NULL; + if (m_selectionGroup) { + QList<QGraphicsItem *> items = m_selectionGroup->childItems(); + qDeleteAll(items); + scene()->destroyItemGroup(m_selectionGroup); + m_selectionGroup = NULL; } else QGraphicsView::dragLeaveEvent(event); } void CustomTrackView::dropEvent(QDropEvent * event) { - if (m_dropItem) { - AddTimelineClipCommand *command = new AddTimelineClipCommand(this, m_dropItem->xml(), m_dropItem->clipProducer(), m_dropItem->info(), m_dropItem->effectList(), false, false); - m_commandStack->push(command); - //((ClipItem *) m_dropItem)->refreshClip(); - m_dropItem->baseClip()->addReference(); - m_document->updateClip(m_dropItem->baseClip()->getId()); - ItemInfo info; - info = m_dropItem->info(); - info.track = m_scene->m_tracksList.count() - m_dropItem->track(); - //kDebug()<<"IIIIIIIIIIIIIIIIIIIIIIII TRAX CNT: "<<m_scene->m_tracksList.count()<<", DROP: "<<m_dropItem->track(); - m_document->renderer()->mltInsertClip(info, m_dropItem->xml(), m_dropItem->baseClip()->producer()); - //if (m_dropItem->baseClip()->isTransparent()) m_document->renderer()->mltAddClipTransparency(info, getPreviousVideoTrack(m_dropItem->track()), m_dropItem->baseClip()->getId()); - m_dropItem = NULL; + if (m_selectionGroup) { + QList<QGraphicsItem *> items = m_selectionGroup->childItems(); + m_scene->clearSelection(); + if (m_selectionGroup) { + scene()->destroyItemGroup(m_selectionGroup); + m_selectionGroup = NULL; + } + for (int i = 0; i < items.count(); i++) { + ClipItem *item = static_cast <ClipItem *>(items.at(i)); + AddTimelineClipCommand *command = new AddTimelineClipCommand(this, item->xml(), item->clipProducer(), item->info(), item->effectList(), false, false); + m_commandStack->push(command); + item->baseClip()->addReference(); + m_document->updateClip(item->baseClip()->getId()); + ItemInfo info; + info = item->info(); + info.track = m_scene->m_tracksList.count() - item->track(); + m_document->renderer()->mltInsertClip(info, item->xml(), item->baseClip()->producer()); + item->setSelected(true); + } m_document->setModified(true); } else QGraphicsView::dropEvent(event); - m_dropItem = NULL; } @@ -1190,11 +1208,12 @@ m_dragItem = NULL; return; } - if (m_dragItem == NULL) { + if (m_dragItem == NULL && m_selectionGroup == NULL) { emit transitionItemSelected(NULL); return; } - ItemInfo info = m_dragItem->info(); + ItemInfo info; + if (m_dragItem) info = m_dragItem->info(); if (m_operationMode == MOVE) { setCursor(Qt::OpenHandCursor); @@ -1224,18 +1243,22 @@ // Moving several clips. We need to delete them and readd them to new position, // or they might overlap each other during the move - GenTime timeOffset = info.startPos - m_dragItemInfo.startPos; - int trackOffset = info.track - m_dragItemInfo.track; + QList<QGraphicsItem *> items = m_selectionGroup->childItems(); + + GenTime timeOffset = GenTime(m_selectionGroup->scenePos().x(), m_document->fps()) - m_selectionGroupInfo.startPos; + const int trackOffset = m_selectionGroup->track() - m_selectionGroupInfo.track; + //kDebug() << "&DROPPED GRPOUP:" << timeOffset.frames(25) << "x" << trackOffset; if (timeOffset != GenTime() || trackOffset != 0) { QUndoCommand *moveClips = new QUndoCommand(); moveClips->setText("Move clips"); // remove items in MLT playlist - for (int i = 0; i < m_selectedClipList.count(); i++) { - AbstractClipItem *item = m_selectedClipList.at(i); + for (int i = 0; i < items.count(); i++) { + AbstractClipItem *item = static_cast <AbstractClipItem *>(items.at(i)); ItemInfo info = item->info(); - info.startPos = info.startPos - timeOffset; + /*info.startPos = info.startPos - timeOffset; info.endPos = info.endPos - timeOffset; - info.track = info.track - trackOffset; + info.track = info.track - trackOffset;*/ + //kDebug() << "REM CLP:" << i << ", START:" << info.startPos.frames(25); if (item->type() == AVWIDGET) { ClipItem *clip = static_cast <ClipItem*>(item); new AddTimelineClipCommand(this, clip->xml(), clip->clipProducer(), info, clip->effectList(), false, true, moveClips); @@ -1247,14 +1270,17 @@ } } - for (int i = 0; i < m_selectedClipList.count(); i++) { + for (int i = 0; i < items.count(); i++) { // re-add items in correct place - AbstractClipItem *item = m_selectedClipList.at(i); + AbstractClipItem *item = static_cast <AbstractClipItem *>(items.at(i)); + ItemInfo info = item->info(); + info.startPos = info.startPos + timeOffset; + info.endPos = info.endPos + timeOffset; + info.track = info.track + trackOffset; if (item->type() == AVWIDGET) { ClipItem *clip = static_cast <ClipItem*>(item); - new AddTimelineClipCommand(this, clip->xml(), clip->clipProducer(), item->info(), clip->effectList(), false, false, moveClips); - ItemInfo info = item->info(); - info.track = m_scene->m_tracksList.count() - item->track(); + new AddTimelineClipCommand(this, clip->xml(), clip->clipProducer(), info, clip->effectList(), false, false, moveClips); + info.track = m_scene->m_tracksList.count() - info.track; m_document->renderer()->mltInsertClip(info, clip->xml(), clip->baseClip()->producer()); } else { Transition *tr = static_cast <Transition*>(item); Modified: branches/KDE4/src/customtrackview.h =================================================================== --- branches/KDE4/src/customtrackview.h 2008-10-09 23:57:27 UTC (rev 2440) +++ branches/KDE4/src/customtrackview.h 2008-10-10 00:13:05 UTC (rev 2441) @@ -145,13 +145,11 @@ uint m_selectedTrack; int m_projectDuration; int m_cursorPos; - ClipItem *m_dropItem; KdenliveDoc *m_document; CustomTrackScene *m_scene; - void addItem(DocClipBase *clip, QPoint pos); - void addItem(DocClipBase *clip, QPoint pos, QPoint zone); QGraphicsLineItem *m_cursorLine; ItemInfo m_dragItemInfo; + ItemInfo m_selectionGroupInfo; OPERATIONTYPE m_operationMode; OPERATIONTYPE m_moveOpMode; AbstractClipItem *m_dragItem; @@ -185,11 +183,11 @@ QCursor m_razorCursor; /** list containing items currently copied in the timeline */ QList<AbstractClipItem *> m_copiedItems; - QList<AbstractClipItem *> m_selectedClipList; /** Used to get the point in timeline where a context menu was opened */ QPoint m_menuPosition; bool m_blockRefresh; AbstractGroupItem *m_selectionGroup; + AbstractGroupItem *m_dropGroup; /** Get the index of the video track that is just below current track */ int getPreviousVideoTrack(int track); Modified: branches/KDE4/src/kdenlivedoc.cpp =================================================================== --- branches/KDE4/src/kdenlivedoc.cpp 2008-10-09 23:57:27 UTC (rev 2440) +++ branches/KDE4/src/kdenlivedoc.cpp 2008-10-10 00:13:05 UTC (rev 2441) @@ -638,7 +638,7 @@ if (clip && clip->producer() == NULL) { clip->setProducer(prods.at(i)); } - if (clip->clipType() == TEXT && !QFile::exists(clip->fileURL().path())) { + if (clip && clip->clipType() == TEXT && !QFile::exists(clip->fileURL().path())) { // regenerate text clip image if required kDebug() << "// TITLE: " << clip->getProperty("titlename") << " Preview file: " << clip->getProperty("resource") << " DOES NOT EXIST"; QString titlename = clip->getProperty("titlename"); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <j-...@us...> - 2008-10-10 12:02:14
|
Revision: 2442 http://kdenlive.svn.sourceforge.net/kdenlive/?rev=2442&view=rev Author: j-b-m Date: 2008-10-10 11:00:40 +0000 (Fri, 10 Oct 2008) Log Message: ----------- Fix crash on folder edit Modified Paths: -------------- branches/KDE4/src/projectitem.cpp branches/KDE4/src/projectlist.cpp branches/KDE4/src/projectlistview.cpp Modified: branches/KDE4/src/projectitem.cpp =================================================================== --- branches/KDE4/src/projectitem.cpp 2008-10-10 00:13:05 UTC (rev 2441) +++ branches/KDE4/src/projectitem.cpp 2008-10-10 11:00:40 UTC (rev 2442) @@ -178,6 +178,7 @@ void ProjectItem::setProperties(const QMap < QString, QString > &attributes, const QMap < QString, QString > &metadata) { + if (m_clip == NULL) return; if (attributes.contains("duration")) { //if (m_clipType == AUDIO || m_clipType == VIDEO || m_clipType == AV) //m_clip->setProperty("duration", attributes["duration"]); Modified: branches/KDE4/src/projectlist.cpp =================================================================== --- branches/KDE4/src/projectlist.cpp 2008-10-10 00:13:05 UTC (rev 2441) +++ branches/KDE4/src/projectlist.cpp 2008-10-10 11:00:40 UTC (rev 2442) @@ -130,8 +130,10 @@ void ProjectList::slotEditClip() { ProjectItem *item = static_cast <ProjectItem*>(listView->currentItem()); - if (item && !item->isGroup()) emit clipSelected(item->referencedClip()); - emit showClipProperties(item->referencedClip()); + if (item && !item->isGroup()) { + emit clipSelected(item->referencedClip()); + emit showClipProperties(item->referencedClip()); + } } @@ -159,7 +161,7 @@ void ProjectList::slotUpdateClipProperties(ProjectItem *clip, QMap <QString, QString> properties) { if (!clip) return; - clip->setProperties(properties); + if (!clip->isGroup()) clip->setProperties(properties); if (properties.contains("description")) { CLIPTYPE type = clip->clipType(); clip->setText(2, properties.value("description")); @@ -183,7 +185,7 @@ QMap <QString, QString> props; props["description"] = item->text(2); slotUpdateClipProperties(clip, props); - } else if (column == 1 && clip->clipType() == FOLDER) { + } else if (column == 1 && clip->isGroup()) { m_doc->slotEditFolder(item->text(1), clip->groupName(), clip->clipId()); } } Modified: branches/KDE4/src/projectlistview.cpp =================================================================== --- branches/KDE4/src/projectlistview.cpp 2008-10-10 00:13:05 UTC (rev 2441) +++ branches/KDE4/src/projectlistview.cpp 2008-10-10 11:00:40 UTC (rev 2442) @@ -112,8 +112,9 @@ void ProjectListView::mouseDoubleClickEvent(QMouseEvent * event) { ProjectItem *item = static_cast <ProjectItem *>(itemAt(event->pos())); if (!item) emit addClip(); - else if ((item->clipType() == FOLDER && columnAt(event->pos().x()) == 1) || columnAt(event->pos().x()) == 2) QTreeWidget::mouseDoubleClickEvent(event); - else emit showProperties(item->referencedClip()); + else if (item->isGroup()) { + if ((columnAt(event->pos().x()) == 1) || columnAt(event->pos().x()) == 2) QTreeWidget::mouseDoubleClickEvent(event); + } else emit showProperties(item->referencedClip()); } // virtual This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <j-...@us...> - 2008-10-13 08:30:19
|
Revision: 2456 http://kdenlive.svn.sourceforge.net/kdenlive/?rev=2456&view=rev Author: j-b-m Date: 2008-10-13 08:27:35 +0000 (Mon, 13 Oct 2008) Log Message: ----------- Fix "delete" key not working in project tree, allow deletion of several clips at once Modified Paths: -------------- branches/KDE4/src/mainwindow.cpp branches/KDE4/src/projectlist.cpp branches/KDE4/src/projectlist.h Modified: branches/KDE4/src/mainwindow.cpp =================================================================== --- branches/KDE4/src/mainwindow.cpp 2008-10-13 08:08:10 UTC (rev 2455) +++ branches/KDE4/src/mainwindow.cpp 2008-10-13 08:27:35 UTC (rev 2456) @@ -1321,7 +1321,8 @@ void MainWindow::slotDeleteTimelineClip() { - if (m_activeTimeline) { + if (projectListDock->isActiveWindow()) m_projectList->slotRemoveClip(); + else if (m_activeTimeline) { m_activeTimeline->projectView()->deleteSelectedClips(); } } Modified: branches/KDE4/src/projectlist.cpp =================================================================== --- branches/KDE4/src/projectlist.cpp 2008-10-13 08:08:10 UTC (rev 2455) +++ branches/KDE4/src/projectlist.cpp 2008-10-13 08:27:35 UTC (rev 2456) @@ -203,19 +203,23 @@ void ProjectList::slotRemoveClip() { if (!listView->currentItem()) return; - ProjectItem *item = static_cast <ProjectItem *>(listView->currentItem()); QList <QString> ids; QMap <QString, QString> folderids; - if (item->clipType() == FOLDER) folderids[item->groupName()] = item->clipId(); - else ids << item->clipId(); - if (item->numReferences() > 0) { - if (KMessageBox::questionYesNo(this, i18np("Delete clip <b>%2</b> ?<br>This will also remove the clip in timeline", "Delete clip <b>%2</b> ?<br>This will also remove its %1 clips in timeline", item->numReferences(), item->names().at(1)), i18n("Delete Clip")) != KMessageBox::Yes) return; - } else if (item->clipType() == FOLDER && item->childCount() > 0) { - int children = item->childCount(); - if (KMessageBox::questionYesNo(this, i18n("Delete folder <b>%2</b> ?<br>This will also remove the %1 clips in that folder", children, item->names().at(1)), i18n("Delete Folder")) != KMessageBox::Yes) return; - for (int i = 0; i < children; ++i) { - ProjectItem *child = static_cast <ProjectItem *>(item->child(i)); - ids << child->clipId(); + QList<QTreeWidgetItem *> selected = listView->selectedItems(); + ProjectItem *item; + for (int i = 0; i < selected.count(); i++) { + item = static_cast <ProjectItem *>(selected.at(i)); + if (item->isGroup()) folderids[item->groupName()] = item->clipId(); + else ids << item->clipId(); + if (item->numReferences() > 0) { + if (KMessageBox::questionYesNo(this, i18np("Delete clip <b>%2</b> ?<br>This will also remove the clip in timeline", "Delete clip <b>%2</b> ?<br>This will also remove its %1 clips in timeline", item->numReferences(), item->names().at(1)), i18n("Delete Clip")) != KMessageBox::Yes) return; + } else if (item->clipType() == FOLDER && item->childCount() > 0) { + int children = item->childCount(); + if (KMessageBox::questionYesNo(this, i18n("Delete folder <b>%2</b> ?<br>This will also remove the %1 clips in that folder", children, item->names().at(1)), i18n("Delete Folder")) != KMessageBox::Yes) return; + for (int i = 0; i < children; ++i) { + ProjectItem *child = static_cast <ProjectItem *>(item->child(i)); + ids << child->clipId(); + } } } if (!ids.isEmpty()) m_doc->deleteProjectClip(ids); Modified: branches/KDE4/src/projectlist.h =================================================================== --- branches/KDE4/src/projectlist.h 2008-10-13 08:08:10 UTC (rev 2455) +++ branches/KDE4/src/projectlist.h 2008-10-13 08:27:35 UTC (rev 2456) @@ -121,6 +121,7 @@ void slotRefreshClipThumbnail(ProjectItem *item, bool update = true); void slotRemoveInvalidClip(const QString &id); void slotSelectClip(const QString &ix); + void slotRemoveClip(); private: ProjectListView *listView; @@ -142,7 +143,6 @@ private slots: void slotAddClip(QUrl givenUrl = QUrl(), QString group = QString()); - void slotRemoveClip(); void slotEditClip(); void slotClipSelected(); void slotAddColorClip(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <j-...@us...> - 2008-10-13 14:38:14
|
Revision: 2458 http://kdenlive.svn.sourceforge.net/kdenlive/?rev=2458&view=rev Author: j-b-m Date: 2008-10-13 14:38:05 +0000 (Mon, 13 Oct 2008) Log Message: ----------- Add command line option ( --mlt-path ) to give location of the MLT install Modified Paths: -------------- branches/KDE4/src/main.cpp branches/KDE4/src/mainwindow.cpp branches/KDE4/src/mainwindow.h Modified: branches/KDE4/src/main.cpp =================================================================== --- branches/KDE4/src/main.cpp 2008-10-13 10:09:44 UTC (rev 2457) +++ branches/KDE4/src/main.cpp 2008-10-13 14:38:05 UTC (rev 2458) @@ -18,7 +18,6 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ - #include <KApplication> #include <KAboutData> #include <KDebug> @@ -28,17 +27,19 @@ #include "mainwindow.h" int main(int argc, char *argv[]) { - KAboutData aboutData("kdenlive", "kdenlive", - ki18n("Kdenlive"), "0.7", + KAboutData aboutData(QByteArray("kdenlive"), QByteArray("kdenlive"), + ki18n("Kdenlive"), QByteArray("0.7"), ki18n("An open source video editor."), KAboutData::License_GPL, ki18n("Copyright (c) 2008 Development team")); aboutData.addAuthor(ki18n("Jean-Baptiste Mardelle"), ki18n("Mlt porting, KDE4 porting, Main developer"), "jb...@kd..."); aboutData.addAuthor(ki18n("Marco Gittler"), ki18n("MltConnection, Transition, Effect, Timeline Developer"), "g....@fr..."); aboutData.setHomepage("http://kdenlive.org"); + //aboutData.setBugAddress("http://kdenlive.org/mantis"); KCmdLineArgs::init(argc, argv, &aboutData); - KCmdLineOptions options; //new + KCmdLineOptions options; + options.add("mlt-path <path>", ki18n("Set the path for MLT environnement")); options.add("+[file]", ki18n("Document to open")); //new KCmdLineArgs::addCmdLineOptions(options); //new @@ -58,10 +59,11 @@ ++n; } } else { - MainWindow* window = new MainWindow(); + KCmdLineArgs *args = KCmdLineArgs::parsedArgs(); //new + + QString mltPath = args->getOption("mlt-path"); + MainWindow* window = new MainWindow(mltPath); window->show(); - - KCmdLineArgs *args = KCmdLineArgs::parsedArgs(); //new if (args->count()) { //new window->openFile(args->url(0)); //new } Modified: branches/KDE4/src/mainwindow.cpp =================================================================== --- branches/KDE4/src/mainwindow.cpp 2008-10-13 10:09:44 UTC (rev 2457) +++ branches/KDE4/src/mainwindow.cpp 2008-10-13 14:38:05 UTC (rev 2458) @@ -96,12 +96,12 @@ EffectsList MainWindow::customEffects; EffectsList MainWindow::transitions; -MainWindow::MainWindow(QWidget *parent) +MainWindow::MainWindow(const QString &MltPath, QWidget *parent) : KXmlGuiWindow(parent), m_activeDocument(NULL), m_activeTimeline(NULL), m_renderWidget(NULL), m_jogProcess(NULL), m_findActivated(false), m_initialized(false) { setlocale(LC_NUMERIC, "POSIX"); setFont(KGlobalSettings::toolBarFont()); - parseProfiles(); + parseProfiles(MltPath); m_commandStack = new QUndoGroup; m_timelineArea = new KTabWidget(this); m_timelineArea->setTabReorderingEnabled(true); @@ -980,10 +980,15 @@ } -void MainWindow::parseProfiles() { +void MainWindow::parseProfiles(const QString &mltPath) { //kdDebug()<<" + + YOUR MLT INSTALL WAS FOUND IN: "<< MLT_PREFIX <<endl; //KdenliveSettings::setDefaulttmpfolder(); + if (!mltPath.isEmpty()) { + KdenliveSettings::setMltpath(mltPath + "/share/mlt/profiles/"); + KdenliveSettings::setRendererpath(mltPath + "/bin/inigo"); + } + if (KdenliveSettings::mltpath().isEmpty()) { KdenliveSettings::setMltpath(QString(MLT_PREFIX) + QString("/share/mlt/profiles/")); } Modified: branches/KDE4/src/mainwindow.h =================================================================== --- branches/KDE4/src/mainwindow.h 2008-10-13 10:09:44 UTC (rev 2457) +++ branches/KDE4/src/mainwindow.h 2008-10-13 14:38:05 UTC (rev 2458) @@ -61,8 +61,8 @@ Q_OBJECT public: - MainWindow(QWidget *parent = 0); - void parseProfiles(); + MainWindow(const QString &MltPath = QString(), QWidget *parent = 0); + void parseProfiles(const QString &mltPath = QString()); static EffectsList videoEffects; static EffectsList audioEffects; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |