From: <j-...@us...> - 2009-03-19 23:41:26
|
Revision: 3165 http://kdenlive.svn.sourceforge.net/kdenlive/?rev=3165&view=rev Author: j-b-m Date: 2009-03-19 23:41:16 +0000 (Thu, 19 Mar 2009) Log Message: ----------- First steps for "split audio" feature,. Don't use yet, it might corrupt your projects http://www.kdenlive.org:80/mantis/view.php?id=332 Modified Paths: -------------- trunk/kdenlive/src/CMakeLists.txt trunk/kdenlive/src/clipitem.cpp trunk/kdenlive/src/clipitem.h trunk/kdenlive/src/customtrackview.cpp trunk/kdenlive/src/customtrackview.h trunk/kdenlive/src/docclipbase.cpp trunk/kdenlive/src/docclipbase.h trunk/kdenlive/src/kdenliveui.rc trunk/kdenlive/src/mainwindow.cpp trunk/kdenlive/src/mainwindow.h trunk/kdenlive/src/renderer.cpp trunk/kdenlive/src/renderer.h trunk/kdenlive/src/trackview.cpp Added Paths: ----------- trunk/kdenlive/src/splitaudiocommand.cpp trunk/kdenlive/src/splitaudiocommand.h Modified: trunk/kdenlive/src/CMakeLists.txt =================================================================== --- trunk/kdenlive/src/CMakeLists.txt 2009-03-19 12:44:41 UTC (rev 3164) +++ trunk/kdenlive/src/CMakeLists.txt 2009-03-19 23:41:16 UTC (rev 3165) @@ -151,6 +151,7 @@ dvdwizard.cpp locktrackcommand.cpp groupclipscommand.cpp + splitaudiocommand.cpp ) add_definitions( ${KDE4_DEFINITIONS} ) Modified: trunk/kdenlive/src/clipitem.cpp =================================================================== --- trunk/kdenlive/src/clipitem.cpp 2009-03-19 12:44:41 UTC (rev 3164) +++ trunk/kdenlive/src/clipitem.cpp 2009-03-19 23:41:16 UTC (rev 3165) @@ -28,6 +28,7 @@ #include "kthumb.h" #include <KDebug> +#include <KIcon> #include <QPainter> #include <QTimer> @@ -37,7 +38,7 @@ ClipItem::ClipItem(DocClipBase *clip, ItemInfo info, double fps, double speed, bool generateThumbs) - : AbstractClipItem(info, QRectF(), fps), m_clip(clip), m_resizeMode(NONE), m_grabPoint(0), m_maxTrack(0), m_hasThumbs(false), startThumbTimer(NULL), endThumbTimer(NULL), 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(speed), framePixelWidth(0), m_startPix(QPixmap()), m_endPix(QPixmap()) { + : AbstractClipItem(info, QRectF(), fps), m_clip(clip), m_resizeMode(NONE), m_grabPoint(0), m_maxTrack(0), m_hasThumbs(false), startThumbTimer(NULL), endThumbTimer(NULL), 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(speed), framePixelWidth(0), m_startPix(QPixmap()), m_endPix(QPixmap()), m_videoOnly(false), m_audioOnly(false) { setZValue(1); setRect(0, 0, (info.endPos - info.startPos).frames(fps) - 0.02, (double)(KdenliveSettings::trackheight() - 2)); setPos(info.startPos.frames(fps), (double)(info.track * KdenliveSettings::trackheight()) + 1); @@ -714,10 +715,16 @@ } // Draw clip name + QRectF txtBounding = painter->boundingRect(mapped, Qt::AlignHCenter | Qt::AlignVCenter, ' ' + m_clipName + ' '); painter->fillRect(txtBounding, QBrush(QColor(0, 0, 0, 150))); //painter->setPen(QColor(0, 0, 0, 180)); //painter->drawText(txtBounding, Qt::AlignCenter, m_clipName); + if (m_videoOnly) { + painter->drawPixmap(txtBounding.topLeft() - QPointF(17, -1), KIcon("video-x-generic").pixmap(QSize(15, 15))); + } else if (m_audioOnly) { + painter->drawPixmap(txtBounding.topLeft() - QPointF(17, -1), KIcon("audio-x-generic").pixmap(QSize(15, 15))); + } txtBounding.translate(QPointF(1, 1)); painter->setPen(QColor(255, 255, 255, 255)); painter->drawText(txtBounding, Qt::AlignCenter, m_clipName); @@ -1387,6 +1394,15 @@ QDomElement e = doc.documentElement(); //if (view) view->slotAddTransition(this, t->toXML() , t->startPos(), track()); } + +void ClipItem::setVideoOnly(bool force) { + m_videoOnly = force; +} + +void ClipItem::setAudioOnly(bool force) { + m_audioOnly = force; +} + // virtual /* void CustomTrackView::mousePressEvent ( QMouseEvent * event ) Modified: trunk/kdenlive/src/clipitem.h =================================================================== --- trunk/kdenlive/src/clipitem.h 2009-03-19 12:44:41 UTC (rev 3164) +++ trunk/kdenlive/src/clipitem.h 2009-03-19 23:41:16 UTC (rev 3165) @@ -104,6 +104,8 @@ bool checkKeyFrames(); QPixmap startThumb() const; QPixmap endThumb() const; + void setVideoOnly(bool force); + void setAudioOnly(bool force); protected: //virtual void mouseMoveEvent(QGraphicsSceneMouseEvent * event); @@ -127,6 +129,8 @@ uint m_startFade; uint m_endFade; int m_maxTrack; + bool m_audioOnly; + bool m_videoOnly; QPixmap m_startPix; QPixmap m_endPix; Modified: trunk/kdenlive/src/customtrackview.cpp =================================================================== --- trunk/kdenlive/src/customtrackview.cpp 2009-03-19 12:44:41 UTC (rev 3164) +++ trunk/kdenlive/src/customtrackview.cpp 2009-03-19 23:41:16 UTC (rev 3165) @@ -55,6 +55,7 @@ #include "initeffects.h" #include "locktrackcommand.h" #include "groupclipscommand.h" +#include "splitaudiocommand.h" #include <KDebug> #include <KLocale> @@ -3986,4 +3987,72 @@ } } +void CustomTrackView::splitAudio() { + resetSelectionGroup(); + QList<QGraphicsItem *> selection = scene()->selectedItems(); + if (selection.isEmpty()) { + emit displayMessage(i18n("You must select one clip for this action"), ErrorMessage); + return; + } + QUndoCommand *splitCommand = new QUndoCommand(); + splitCommand->setText(i18n("Split audio")); + for (int i = 0; i < selection.count(); i++) { + if (selection.at(i)->type() == AVWIDGET) { + ClipItem *clip = static_cast <ClipItem *>(selection.at(i)); + if (clip->clipType() == AV || clip->clipType() == PLAYLIST) { + if (clip->parentItem()) { + emit displayMessage(i18n("Cannot split audio of grouped clips"), ErrorMessage); + } else { + new SplitAudioCommand(this, clip->track(), clip->startPos(), true, splitCommand); + } + } + } + } + m_commandStack->push(splitCommand); +} + +void CustomTrackView::doSplitAudio(const GenTime &pos, int track, bool split) { + ClipItem *clip = getClipItemAt(pos, track); + if (clip == NULL) { + kDebug() << "// Cannot find clip to split!!!"; + return; + } + if (split) { + int start = pos.frames(m_document->fps()); + int freetrack = m_document->tracksCount() - track - 1; + for (; freetrack > 0; freetrack--) { + kDebug() << "// CHK DOC TRK:" << freetrack << ", DUR:" << m_document->renderer()->mltTrackDuration(freetrack); + if (m_document->trackInfoAt(freetrack - 1).type == AUDIOTRACK) { + kDebug() << "// CHK DOC TRK:" << freetrack << ", DUR:" << m_document->renderer()->mltTrackDuration(freetrack); + if (m_document->renderer()->mltTrackDuration(freetrack) < start || m_document->renderer()->mltGetSpaceLength(pos, freetrack, false) >= clip->duration().frames(m_document->fps())) { + kDebug() << "FOUND SPACE ON TRK: " << freetrack; + break; + } + } + } + kDebug() << "GOT TRK: " << track; + if (freetrack == 0) { + emit displayMessage(i18n("No empty space to put clip audio"), ErrorMessage); + } else { + ItemInfo info; + info.startPos = clip->startPos(); + info.endPos = clip->endPos(); + info.cropStart = clip->cropStart(); + info.track = m_document->tracksCount() - freetrack; + addClip(clip->xml(), clip->clipProducer(), info, clip->effectList()); + scene()->clearSelection(); + clip->setSelected(true); + ClipItem *audioClip = getClipItemAt(start, info.track); + if (audioClip) { + clip->setVideoOnly(true); + m_document->renderer()->mltUpdateClipProducer(m_document->tracksCount() - track, start, clip->baseClip()->videoProducer()); + m_document->renderer()->mltUpdateClipProducer(m_document->tracksCount() - info.track, start, clip->baseClip()->audioProducer()); + audioClip->setSelected(true); + audioClip->setAudioOnly(true); + groupSelectedItems(false, true); + } + } + } +} + #include "customtrackview.moc" Modified: trunk/kdenlive/src/customtrackview.h =================================================================== --- trunk/kdenlive/src/customtrackview.h 2009-03-19 12:44:41 UTC (rev 3164) +++ trunk/kdenlive/src/customtrackview.h 2009-03-19 23:41:16 UTC (rev 3165) @@ -113,6 +113,8 @@ void groupClips(bool group = true); void doGroupClips(QList <ItemInfo> clipInfos, QList <ItemInfo> transitionInfos, bool group); void loadGroups(const QDomNodeList groups); + void splitAudio(); + void doSplitAudio(const GenTime &pos, int track, bool split); public slots: void setCursorPos(int pos, bool seek = true); Modified: trunk/kdenlive/src/docclipbase.cpp =================================================================== --- trunk/kdenlive/src/docclipbase.cpp 2009-03-19 12:44:41 UTC (rev 3164) +++ trunk/kdenlive/src/docclipbase.cpp 2009-03-19 23:41:16 UTC (rev 3165) @@ -34,7 +34,7 @@ #include <QCryptographicHash> DocClipBase::DocClipBase(ClipManager *clipManager, QDomElement xml, const QString &id): - m_id(id), m_description(QString()), m_refcount(0), m_audioThumbCreated(false), m_duration(GenTime()), m_thumbProd(NULL), m_audioTimer(NULL), m_properties(QMap <QString, QString> ()), audioFrameChache(QMap<int, QMap<int, QByteArray> > ()), m_baseTrackProducers(QList <Mlt::Producer *>()), m_snapMarkers(QList < CommentedTime > ()) { + m_id(id), m_description(QString()), m_refcount(0), m_audioThumbCreated(false), m_duration(GenTime()), m_thumbProd(NULL), m_audioTimer(NULL), m_properties(QMap <QString, QString> ()), audioFrameChache(QMap<int, QMap<int, QByteArray> > ()), m_baseTrackProducers(QList <Mlt::Producer *>()), m_snapMarkers(QList < CommentedTime > ()), m_videoOnlyProducer(NULL), m_audioOnlyProducer(NULL) { int type = xml.attribute("type").toInt(); m_clipType = (CLIPTYPE) type; @@ -360,7 +360,16 @@ QString id = producer->get("id"); if (id.contains('_')) { // this is a subtrack producer, insert it at correct place - int pos = id.section('_', 1, 1).toInt(); + id = id.section('_', 1, 1); + if (id == "audio") { + m_audioOnlyProducer = producer; + return; + } + if (id == "video") { + m_videoOnlyProducer = producer; + return; + } + int pos = id.toInt(); if (pos >= m_baseTrackProducers.count()) { while (m_baseTrackProducers.count() - 1 < pos) { m_baseTrackProducers.append(NULL); @@ -376,6 +385,42 @@ if (m_thumbProd && !m_thumbProd->hasProducer()) m_thumbProd->setProducer(producer); } +Mlt::Producer *DocClipBase::audioProducer() { + if (m_audioOnlyProducer == NULL) { + int i; + for (i = 0; i < m_baseTrackProducers.count(); i++) + if (m_baseTrackProducers.at(i) != NULL) break; + if (i >= m_baseTrackProducers.count()) return NULL; + m_audioOnlyProducer = new Mlt::Producer(*m_baseTrackProducers.at(i)->profile(), m_baseTrackProducers.at(i)->get("resource")); + if (m_properties.contains("force_aspect_ratio")) m_audioOnlyProducer->set("force_aspect_ratio", m_properties.value("force_aspect_ratio").toDouble()); + if (m_properties.contains("threads")) m_audioOnlyProducer->set("threads", m_properties.value("threads").toInt()); + m_audioOnlyProducer->set("video_index", -1); + if (m_properties.contains("audio_index")) m_audioOnlyProducer->set("audio_index", m_properties.value("audio_index").toInt()); + char *tmp = (char *) qstrdup(QString(getId() + "_audio").toUtf8().data()); + m_audioOnlyProducer->set("id", tmp); + delete[] tmp; + } + return m_audioOnlyProducer; +} + +Mlt::Producer *DocClipBase::videoProducer() { + if (m_videoOnlyProducer == NULL) { + int i; + for (i = 0; i < m_baseTrackProducers.count(); i++) + if (m_baseTrackProducers.at(i) != NULL) break; + if (i >= m_baseTrackProducers.count()) return NULL; + m_videoOnlyProducer = new Mlt::Producer(*m_baseTrackProducers.at(i)->profile(), m_baseTrackProducers.at(i)->get("resource")); + if (m_properties.contains("force_aspect_ratio")) m_videoOnlyProducer->set("force_aspect_ratio", m_properties.value("force_aspect_ratio").toDouble()); + if (m_properties.contains("threads")) m_videoOnlyProducer->set("threads", m_properties.value("threads").toInt()); + m_videoOnlyProducer->set("audio_index", -1); + if (m_properties.contains("video_index")) m_videoOnlyProducer->set("video_index", m_properties.value("video_index").toInt()); + char *tmp = (char *) qstrdup(QString(getId() + "_video").toUtf8().data()); + m_videoOnlyProducer->set("id", tmp); + delete[] tmp; + } + return m_videoOnlyProducer; +} + Mlt::Producer *DocClipBase::producer(int track) { /*for (int i = 0; i < m_baseTrackProducers.count(); i++) { if (m_baseTrackProducers.at(i)) kDebug() << "// PROD: " << i << ", ID: " << m_baseTrackProducers.at(i)->get("id"); Modified: trunk/kdenlive/src/docclipbase.h =================================================================== --- trunk/kdenlive/src/docclipbase.h 2009-03-19 12:44:41 UTC (rev 3164) +++ trunk/kdenlive/src/docclipbase.h 2009-03-19 23:41:16 UTC (rev 3165) @@ -107,8 +107,14 @@ return false; } + /** Sets producers for the current clip (one for each track due to a limitation in MLT's track mixing */ void setProducer(Mlt::Producer *producer); + /** Retrieve a producer for a track */ Mlt::Producer *producer(int track = -1); + /** Retrieve the producer that shows only video */ + Mlt::Producer *videoProducer(); + /** Retrieve the producer that shows only audio */ + Mlt::Producer *audioProducer(); /** Returns true if this clip is a project clip, false otherwise. Overridden in DocClipProject, * where it returns true. */ @@ -180,6 +186,8 @@ * that exist. */ uint m_refcount; QList <Mlt::Producer *> m_baseTrackProducers; + Mlt::Producer *m_audioOnlyProducer; + Mlt::Producer *m_videoOnlyProducer; CLIPTYPE m_clipType; /** A list of snap markers; these markers are added to a clips snap-to points, and are displayed as necessary. */ Modified: trunk/kdenlive/src/kdenliveui.rc =================================================================== --- trunk/kdenlive/src/kdenliveui.rc 2009-03-19 12:44:41 UTC (rev 3164) +++ trunk/kdenlive/src/kdenliveui.rc 2009-03-19 23:41:16 UTC (rev 3165) @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE kpartgui SYSTEM "kpartgui.dtd"> -<gui name="kdenlive" version="37"> +<gui name="kdenlive" version="38"> <ToolBar name="extraToolBar" > <text>Extra Toolbar</text> <Action name="project_render" /> @@ -54,6 +54,7 @@ <Action name="delete_all_clip_markers" /> </Menu> <Action name="auto_transition" /> + <Action name="split_audio" /> </Menu> <Menu name="timeline" ><text>Timeline</text> Modified: trunk/kdenlive/src/mainwindow.cpp =================================================================== --- trunk/kdenlive/src/mainwindow.cpp 2009-03-19 12:44:41 UTC (rev 3164) +++ trunk/kdenlive/src/mainwindow.cpp 2009-03-19 23:41:16 UTC (rev 3165) @@ -327,6 +327,7 @@ m_timelineContextClipMenu->addAction(actionCollection()->action("cut_timeline_clip")); m_timelineContextClipMenu->addAction(actionCollection()->action(KStandardAction::name(KStandardAction::Copy))); m_timelineContextClipMenu->addAction(actionCollection()->action("paste_effects")); + m_timelineContextClipMenu->addAction(actionCollection()->action("split_audio")); QMenu *markersMenu = (QMenu*)(factory()->container("marker_menu", this)); m_timelineContextClipMenu->addMenu(markersMenu); @@ -933,6 +934,10 @@ collection->addAction("edit_clip_marker", editClipMarker); connect(editClipMarker, SIGNAL(triggered(bool)), this, SLOT(slotEditClipMarker())); + KAction* splitAudio = new KAction(KIcon("document-new"), i18n("Split Audio"), this); + collection->addAction("split_audio", splitAudio); + connect(splitAudio, SIGNAL(triggered(bool)), this, SLOT(slotSplitAudio())); + KAction *insertSpace = new KAction(KIcon(), i18n("Insert Space"), this); collection->addAction("insert_space", insertSpace); connect(insertSpace, SIGNAL(triggered()), this, SLOT(slotInsertSpace())); @@ -2378,9 +2383,13 @@ } void MainWindow::slotAutoTransition() { - m_activeTimeline->projectView()->autoTransition(); + if (m_activeTimeline) m_activeTimeline->projectView()->autoTransition(); } +void MainWindow::slotSplitAudio() { + if (m_activeTimeline) m_activeTimeline->projectView()->splitAudio(); +} + void MainWindow::slotDvdWizard(const QString &url, const QString &profile) { DvdWizard *w = new DvdWizard(url, profile, this); w->exec(); Modified: trunk/kdenlive/src/mainwindow.h =================================================================== --- trunk/kdenlive/src/mainwindow.h 2009-03-19 12:44:41 UTC (rev 3164) +++ trunk/kdenlive/src/mainwindow.h 2009-03-19 23:41:16 UTC (rev 3165) @@ -294,6 +294,7 @@ void slotDvdWizard(const QString &url = QString(), const QString &profile = "dv_pal"); void slotGroupClips(); void slotUnGroupClips(); + void slotSplitAudio(); signals: Q_SCRIPTABLE void abortRenderJob(const QString &url); Modified: trunk/kdenlive/src/renderer.cpp =================================================================== --- trunk/kdenlive/src/renderer.cpp 2009-03-19 12:44:41 UTC (rev 3164) +++ trunk/kdenlive/src/renderer.cpp 2009-03-19 23:41:16 UTC (rev 3165) @@ -1246,16 +1246,14 @@ double trackDuration; if (trackNb == 1) { Mlt::Producer trackProducer(tractor.track(0)); - Mlt::Playlist trackPlaylist((mlt_playlist) trackProducer.get_service()); - duration = Mlt::Producer(trackPlaylist.get_producer()).get_playtime() - 1; + duration = trackProducer.get_playtime() - 1; m_mltProducer->set("out", duration); emit durationChanged((int) duration); return; } while (trackNb > 1) { Mlt::Producer trackProducer(tractor.track(trackNb - 1)); - Mlt::Playlist trackPlaylist((mlt_playlist) trackProducer.get_service()); - trackDuration = Mlt::Producer(trackPlaylist.get_producer()).get_playtime() - 1; + trackDuration = trackProducer.get_playtime() - 1; //kDebug() << " / / /DURATON FOR TRACK " << trackNb - 1 << " = " << trackDuration; if (trackDuration > duration) duration = trackDuration; @@ -1263,10 +1261,10 @@ } Mlt::Producer blackTrackProducer(tractor.track(0)); - Mlt::Playlist blackTrackPlaylist((mlt_playlist) blackTrackProducer.get_service()); - double blackDuration = Mlt::Producer(blackTrackPlaylist.get_producer()).get_playtime() - 1; + double blackDuration = blackTrackProducer.get_playtime() - 1; if (blackDuration != duration) { + Mlt::Playlist blackTrackPlaylist((mlt_playlist) blackTrackProducer.get_service()); blackTrackPlaylist.clear(); int dur = (int)duration; while (dur > 14000) { @@ -1485,7 +1483,24 @@ return trackPlaylist.clip_length(clipIndex) + trackPlaylist.clip_start(clipIndex) - insertPos; } +int Render::mltTrackDuration(int track) { + if (!m_mltProducer) { + kDebug() << "PLAYLIST NOT INITIALISED //////"; + return -1; + } + Mlt::Producer parentProd(m_mltProducer->parent()); + if (parentProd.get_producer() == NULL) { + kDebug() << "PLAYLIST BROKEN, CANNOT INSERT CLIP //////"; + return -1; + } + Mlt::Service service(parentProd.get_service()); + Mlt::Tractor tractor(service); + + Mlt::Producer trackProducer(tractor.track(track)); + return trackProducer.get_playtime() - 1; +} + void Render::mltInsertSpace(QMap <int, int> trackClipStartList, QMap <int, int> trackTransitionStartList, int track, const GenTime duration, const GenTime timeOffset) { if (!m_mltProducer) { kDebug() << "PLAYLIST NOT INITIALISED //////"; @@ -2323,7 +2338,8 @@ Mlt::Producer *clip; // check if we are moving a slowmotion producer QString serv = clipProducer.parent().get("mlt_service"); - if (serv == "framebuffer") { + QString currentid = clipProducer.parent().get("id"); + if (serv == "framebuffer" || currentid.endsWith("_video")) { clip = &clipProducer; } else clip = prod->cut(clipProducer.get_in(), clipProducer.get_out()); Modified: trunk/kdenlive/src/renderer.h =================================================================== --- trunk/kdenlive/src/renderer.h 2009-03-19 12:44:41 UTC (rev 3164) +++ trunk/kdenlive/src/renderer.h 2009-03-19 23:41:16 UTC (rev 3165) @@ -153,6 +153,7 @@ void mltCutClip(int track, GenTime position); void mltInsertSpace(QMap <int, int> trackClipStartList, QMap <int, int> trackTransitionStartList, int track, const GenTime duration, const GenTime timeOffset); int mltGetSpaceLength(const GenTime pos, int track, bool fromBlankStart); + int mltTrackDuration(int track); bool mltResizeClipEnd(ItemInfo info, GenTime clipDuration); bool mltResizeClipStart(ItemInfo info, GenTime diff); bool mltResizeClipCrop(ItemInfo info, GenTime diff); Added: trunk/kdenlive/src/splitaudiocommand.cpp =================================================================== --- trunk/kdenlive/src/splitaudiocommand.cpp (rev 0) +++ trunk/kdenlive/src/splitaudiocommand.cpp 2009-03-19 23:41:16 UTC (rev 3165) @@ -0,0 +1,43 @@ +/*************************************************************************** + * 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 "splitaudiocommand.h" +#include "customtrackview.h" + +#include <KLocale> + +SplitAudioCommand::SplitAudioCommand(CustomTrackView *view, const int track, const GenTime &pos, bool doIt, QUndoCommand * parent) : QUndoCommand(parent), m_view(view), m_track(track), m_pos(pos), m_doIt(doIt) { + setText(i18n("Split audio")); +} + +// virtual +void SplitAudioCommand::undo() { +// kDebug()<<"---- undoing action"; + m_doIt = true; + m_view->doSplitAudio(m_pos, m_track, false); +} +// virtual +void SplitAudioCommand::redo() { + kDebug() << "---- redoing action"; + if (m_doIt) + m_view->doSplitAudio(m_pos, m_track, true); + m_doIt = true; +} + Added: trunk/kdenlive/src/splitaudiocommand.h =================================================================== --- trunk/kdenlive/src/splitaudiocommand.h (rev 0) +++ trunk/kdenlive/src/splitaudiocommand.h 2009-03-19 23:41:16 UTC (rev 3165) @@ -0,0 +1,48 @@ +/*************************************************************************** + * Copyright (C) 2009 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 SPLITAUDIOCOMMAND_H +#define SPLITAUDIOCOMMAND_H + +#include <QUndoCommand> +#include <QGraphicsView> +#include <QPointF> + +#include <KDebug> +#include "definitions.h" + +class GenTime; +class CustomTrackView; + +class SplitAudioCommand : public QUndoCommand { +public: + SplitAudioCommand(CustomTrackView *view, const int track, const GenTime &pos, bool doIt, QUndoCommand * parent = 0); + virtual void undo(); + virtual void redo(); + +private: + CustomTrackView *m_view; + const GenTime m_pos; + const int m_track; + bool m_doIt; +}; + +#endif + Modified: trunk/kdenlive/src/trackview.cpp =================================================================== --- trunk/kdenlive/src/trackview.cpp 2009-03-19 12:44:41 UTC (rev 3164) +++ trunk/kdenlive/src/trackview.cpp 2009-03-19 23:41:16 UTC (rev 3165) @@ -421,6 +421,8 @@ clipinfo.track = ix; //kDebug() << "// INSERTING CLIP: " << in << "x" << out << ", track: " << ix << ", ID: " << id << ", SCALE: " << m_scale << ", FPS: " << m_doc->fps(); ClipItem *item = new ClipItem(clip, clipinfo, m_doc->fps(), speed, false); + if (idString.endsWith("_video")) item->setVideoOnly(true); + else if (idString.endsWith("_audio")) item->setAudioOnly(true); m_scene->addItem(item); if (locked) item->setItemLocked(true); clip->addReference(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <j-...@us...> - 2009-03-20 13:21:00
|
Revision: 3166 http://kdenlive.svn.sourceforge.net/kdenlive/?rev=3166&view=rev Author: j-b-m Date: 2009-03-20 13:20:52 +0000 (Fri, 20 Mar 2009) Log Message: ----------- New: allow user to modifiy a clip by saying if he wants to keep only video or only audio (from the clip menu) Modified Paths: -------------- trunk/kdenlive/src/CMakeLists.txt trunk/kdenlive/src/clipitem.cpp trunk/kdenlive/src/clipitem.h trunk/kdenlive/src/customtrackview.cpp trunk/kdenlive/src/customtrackview.h trunk/kdenlive/src/docclipbase.cpp trunk/kdenlive/src/docclipbase.h trunk/kdenlive/src/kdenliveui.rc trunk/kdenlive/src/mainwindow.cpp trunk/kdenlive/src/mainwindow.h Added Paths: ----------- trunk/kdenlive/src/changecliptypecommand.cpp trunk/kdenlive/src/changecliptypecommand.h Modified: trunk/kdenlive/src/CMakeLists.txt =================================================================== --- trunk/kdenlive/src/CMakeLists.txt 2009-03-19 23:41:16 UTC (rev 3165) +++ trunk/kdenlive/src/CMakeLists.txt 2009-03-20 13:20:52 UTC (rev 3166) @@ -152,6 +152,7 @@ locktrackcommand.cpp groupclipscommand.cpp splitaudiocommand.cpp + changecliptypecommand.cpp ) add_definitions( ${KDE4_DEFINITIONS} ) Added: trunk/kdenlive/src/changecliptypecommand.cpp =================================================================== --- trunk/kdenlive/src/changecliptypecommand.cpp (rev 0) +++ trunk/kdenlive/src/changecliptypecommand.cpp 2009-03-20 13:20:52 UTC (rev 3166) @@ -0,0 +1,43 @@ +/*************************************************************************** + * 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 "changecliptypecommand.h" +#include "customtrackview.h" + +#include <KLocale> + +ChangeClipTypeCommand::ChangeClipTypeCommand(CustomTrackView *view, const int track, const GenTime &pos, bool videoOnly, bool audioOnly, bool originalVideo, bool originalAudio, bool doIt, QUndoCommand * parent) : QUndoCommand(parent), m_view(view), m_track(track), m_pos(pos), m_videoOnly(videoOnly), m_audioOnly(audioOnly), m_originalVideoOnly(originalVideo), m_originalAudioOnly(originalAudio), m_doIt(doIt) { + setText(i18n("Change clip type")); +} + +// virtual +void ChangeClipTypeCommand::undo() { +// kDebug()<<"---- undoing action"; + m_doIt = true; + m_view->doChangeClipType(m_pos, m_track, m_originalVideoOnly, m_originalAudioOnly); +} +// virtual +void ChangeClipTypeCommand::redo() { + kDebug() << "---- redoing action"; + if (m_doIt) + m_view->doChangeClipType(m_pos, m_track, m_videoOnly, m_audioOnly); + m_doIt = true; +} + Added: trunk/kdenlive/src/changecliptypecommand.h =================================================================== --- trunk/kdenlive/src/changecliptypecommand.h (rev 0) +++ trunk/kdenlive/src/changecliptypecommand.h 2009-03-20 13:20:52 UTC (rev 3166) @@ -0,0 +1,52 @@ +/*************************************************************************** + * Copyright (C) 2009 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 CHANGECLIPTYPECOMMAND_H +#define CHANGECLIPTYPECOMMAND_H + +#include <QUndoCommand> +#include <QGraphicsView> +#include <QPointF> + +#include <KDebug> +#include "definitions.h" + +class GenTime; +class CustomTrackView; + +class ChangeClipTypeCommand : public QUndoCommand { +public: + ChangeClipTypeCommand(CustomTrackView *view, const int track, const GenTime &pos, bool videoOnly, bool audioOnly, bool originalVideo, bool originalAudio, bool doIt, QUndoCommand * parent = 0); + virtual void undo(); + virtual void redo(); + +private: + CustomTrackView *m_view; + const GenTime m_pos; + const int m_track; + bool m_videoOnly; + bool m_audioOnly; + bool m_originalVideoOnly; + bool m_originalAudioOnly; + bool m_doIt; +}; + +#endif + Modified: trunk/kdenlive/src/clipitem.cpp =================================================================== --- trunk/kdenlive/src/clipitem.cpp 2009-03-19 23:41:16 UTC (rev 3165) +++ trunk/kdenlive/src/clipitem.cpp 2009-03-20 13:20:52 UTC (rev 3166) @@ -36,13 +36,15 @@ #include <QGraphicsScene> #include <QMimeData> - ClipItem::ClipItem(DocClipBase *clip, ItemInfo info, double fps, double speed, bool generateThumbs) : AbstractClipItem(info, QRectF(), fps), m_clip(clip), m_resizeMode(NONE), m_grabPoint(0), m_maxTrack(0), m_hasThumbs(false), startThumbTimer(NULL), endThumbTimer(NULL), 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(speed), framePixelWidth(0), m_startPix(QPixmap()), m_endPix(QPixmap()), m_videoOnly(false), m_audioOnly(false) { setZValue(1); setRect(0, 0, (info.endPos - info.startPos).frames(fps) - 0.02, (double)(KdenliveSettings::trackheight() - 2)); setPos(info.startPos.frames(fps), (double)(info.track * KdenliveSettings::trackheight()) + 1); + m_videoPix = KIcon("video-x-generic").pixmap(QSize(15, 15)); + m_audioPix = KIcon("audio-x-generic").pixmap(QSize(15, 15)); + if (m_speed == 1.0) m_clipName = clip->name(); else { m_clipName = clip->name() + " - " + QString::number(m_speed * 100, 'f', 0) + '%'; @@ -721,9 +723,9 @@ //painter->setPen(QColor(0, 0, 0, 180)); //painter->drawText(txtBounding, Qt::AlignCenter, m_clipName); if (m_videoOnly) { - painter->drawPixmap(txtBounding.topLeft() - QPointF(17, -1), KIcon("video-x-generic").pixmap(QSize(15, 15))); + painter->drawPixmap(txtBounding.topLeft() - QPointF(17, -1), m_videoPix); } else if (m_audioOnly) { - painter->drawPixmap(txtBounding.topLeft() - QPointF(17, -1), KIcon("audio-x-generic").pixmap(QSize(15, 15))); + painter->drawPixmap(txtBounding.topLeft() - QPointF(17, -1), m_audioPix); } txtBounding.translate(QPointF(1, 1)); painter->setPen(QColor(255, 255, 255, 255)); @@ -1403,6 +1405,15 @@ m_audioOnly = force; } +bool ClipItem::isAudioOnly() const { + return m_audioOnly; +} + +bool ClipItem::isVideoOnly() const { + return m_videoOnly; +} + + // virtual /* void CustomTrackView::mousePressEvent ( QMouseEvent * event ) Modified: trunk/kdenlive/src/clipitem.h =================================================================== --- trunk/kdenlive/src/clipitem.h 2009-03-19 23:41:16 UTC (rev 3165) +++ trunk/kdenlive/src/clipitem.h 2009-03-20 13:20:52 UTC (rev 3166) @@ -106,6 +106,8 @@ QPixmap endThumb() const; void setVideoOnly(bool force); void setAudioOnly(bool force); + bool isVideoOnly() const; + bool isAudioOnly() const; protected: //virtual void mouseMoveEvent(QGraphicsSceneMouseEvent * event); @@ -154,6 +156,8 @@ QMap<int, QPainterPath > channelPaths; /** Called when clip start is resized, adjust keyframes values */ void checkEffectsKeyframesPos(const int previous, const int current, bool fromStart); + QPixmap m_videoPix; + QPixmap m_audioPix; private slots: void slotFetchThumbs(); Modified: trunk/kdenlive/src/customtrackview.cpp =================================================================== --- trunk/kdenlive/src/customtrackview.cpp 2009-03-19 23:41:16 UTC (rev 3165) +++ trunk/kdenlive/src/customtrackview.cpp 2009-03-20 13:20:52 UTC (rev 3166) @@ -56,6 +56,7 @@ #include "locktrackcommand.h" #include "groupclipscommand.h" #include "splitaudiocommand.h" +#include "changecliptypecommand.h" #include <KDebug> #include <KLocale> @@ -1685,7 +1686,11 @@ ClipItem *clip = static_cast <ClipItem *>(item); // We add a move clip command so that we get the correct producer for new track number if (clip->clipType() == AV || clip->clipType() == AUDIO) { - m_document->renderer()->mltUpdateClipProducer((int)(m_document->tracksCount() - clipinfo.track), clipinfo.startPos.frames(m_document->fps()), clip->baseClip()->producer(clipinfo.track)); + Mlt::Producer *prod; + if (clip->isAudioOnly()) prod = clip->baseClip()->audioProducer(clipinfo.track); + else if (clip->isVideoOnly()) prod = clip->baseClip()->videoProducer(); + else prod = clip->baseClip()->producer(clipinfo.track); + m_document->renderer()->mltUpdateClipProducer((int)(m_document->tracksCount() - clipinfo.track), clipinfo.startPos.frames(m_document->fps()), prod); kDebug() << "// UPDATING CLIP TO TRACK PROD: " << clipinfo.track; } } else if (item->type() == TRANSITIONWIDGET) { @@ -1745,8 +1750,13 @@ ItemInfo clipinfo = clip->info(); kDebug() << "// CLIP TRK IS: " << clipinfo.track; // We add a move clip command so that we get the correct producer for new track number - if (clip->clipType() == AV || clip->clipType() == AUDIO) - m_document->renderer()->mltUpdateClipProducer((int)(m_document->tracksCount() - clipinfo.track), clipinfo.startPos.frames(m_document->fps()), clip->baseClip()->producer(clipinfo.track)); + if (clip->clipType() == AV || clip->clipType() == AUDIO) { + Mlt::Producer *prod; + if (clip->isAudioOnly()) prod = clip->baseClip()->audioProducer(clipinfo.track); + else if (clip->isVideoOnly()) prod = clip->baseClip()->videoProducer(); + else prod = clip->baseClip()->producer(clipinfo.track); + m_document->renderer()->mltUpdateClipProducer((int)(m_document->tracksCount() - clipinfo.track), clipinfo.startPos.frames(m_document->fps()), prod); + } } else if (children.at(i)->type() == TRANSITIONWIDGET) { Transition *tr = static_cast <Transition *>(children.at(i)); tr->updateItem(); @@ -2099,7 +2109,11 @@ // we are moving one clip, easy if (m_dragItem->type() == AVWIDGET && (m_dragItemInfo.startPos != info.startPos || m_dragItemInfo.track != info.track)) { ClipItem *item = static_cast <ClipItem *>(m_dragItem); - bool success = m_document->renderer()->mltMoveClip((int)(m_document->tracksCount() - m_dragItemInfo.track), (int)(m_document->tracksCount() - m_dragItem->track()), (int) m_dragItemInfo.startPos.frames(m_document->fps()), (int)(m_dragItem->startPos().frames(m_document->fps())), item->baseClip()->producer(info.track)); + Mlt::Producer *prod; + if (item->isAudioOnly()) prod = item->baseClip()->audioProducer(m_dragItemInfo.track); + else if (item->isVideoOnly()) prod = item->baseClip()->videoProducer(); + else prod = item->baseClip()->producer(m_dragItemInfo.track); + bool success = m_document->renderer()->mltMoveClip((int)(m_document->tracksCount() - m_dragItemInfo.track), (int)(m_document->tracksCount() - m_dragItem->track()), (int) m_dragItemInfo.startPos.frames(m_document->fps()), (int)(m_dragItem->startPos().frames(m_document->fps())), prod); if (success) { int tracknumber = m_document->tracksCount() - item->track() - 1; bool isLocked = m_document->trackInfoAt(tracknumber).isLocked; @@ -2251,7 +2265,11 @@ if (item->type() == AVWIDGET) { ClipItem *clip = static_cast <ClipItem*>(item); info.track = m_document->tracksCount() - info.track; - m_document->renderer()->mltInsertClip(info, clip->xml(), clip->baseClip()->producer(info.track)); + Mlt::Producer *prod; + if (clip->isAudioOnly()) prod = clip->baseClip()->audioProducer(info.track); + else if (clip->isVideoOnly()) prod = clip->baseClip()->videoProducer(); + else prod = clip->baseClip()->producer(info.track); + m_document->renderer()->mltInsertClip(info, clip->xml(), prod); for (int i = 0; i < clip->effectsCount(); i++) { m_document->renderer()->mltAddEffect(info.track, info.startPos, clip->getEffectArgs(clip->effectAt(i)), false); } @@ -2699,7 +2717,11 @@ baseclip->addReference(); m_document->updateClip(baseclip->getId()); info.track = m_document->tracksCount() - info.track; - m_document->renderer()->mltInsertClip(info, xml, baseclip->producer(info.track)); + Mlt::Producer *prod; + if (item->isAudioOnly()) prod = baseclip->audioProducer(info.track); + else if (item->isVideoOnly()) prod = baseclip->videoProducer(); + else prod = baseclip->producer(info.track); + m_document->renderer()->mltInsertClip(info, xml, prod); for (int i = 0; i < item->effectsCount(); i++) { m_document->renderer()->mltAddEffect(info.track, info.startPos, item->getEffectArgs(item->effectAt(i)), false); } @@ -2818,7 +2840,12 @@ kDebug() << "---------------- ERROR, CANNOT find clip to move at.. "; return; } - bool success = m_document->renderer()->mltMoveClip((int)(m_document->tracksCount() - start.track), (int)(m_document->tracksCount() - end.track), (int) start.startPos.frames(m_document->fps()), (int)end.startPos.frames(m_document->fps()), item->baseClip()->producer(end.track)); + Mlt::Producer *prod; + if (item->isAudioOnly()) prod = item->baseClip()->audioProducer(end.track); + else if (item->isVideoOnly()) prod = item->baseClip()->videoProducer(); + else prod = item->baseClip()->producer(end.track); + + bool success = m_document->renderer()->mltMoveClip((int)(m_document->tracksCount() - start.track), (int)(m_document->tracksCount() - end.track), (int) start.startPos.frames(m_document->fps()), (int)end.startPos.frames(m_document->fps()), prod); if (success) { bool snap = KdenliveSettings::snaptopoints(); KdenliveSettings::setSnaptopoints(false); @@ -2921,7 +2948,11 @@ if (item->type() == AVWIDGET) { ClipItem *clip = static_cast <ClipItem*>(item); info.track = m_document->tracksCount() - info.track; - m_document->renderer()->mltInsertClip(info, clip->xml(), clip->baseClip()->producer(info.track)); + Mlt::Producer *prod; + if (clip->isAudioOnly()) prod = clip->baseClip()->audioProducer(info.track); + else if (clip->isVideoOnly()) prod = clip->baseClip()->videoProducer(); + else prod = clip->baseClip()->producer(info.track); + m_document->renderer()->mltInsertClip(info, clip->xml(), prod); } else { Transition *tr = static_cast <Transition*>(item); int newTrack = tr->transitionEndTrack(); @@ -4046,7 +4077,7 @@ if (audioClip) { clip->setVideoOnly(true); m_document->renderer()->mltUpdateClipProducer(m_document->tracksCount() - track, start, clip->baseClip()->videoProducer()); - m_document->renderer()->mltUpdateClipProducer(m_document->tracksCount() - info.track, start, clip->baseClip()->audioProducer()); + m_document->renderer()->mltUpdateClipProducer(m_document->tracksCount() - info.track, start, clip->baseClip()->audioProducer(info.track)); audioClip->setSelected(true); audioClip->setAudioOnly(true); groupSelectedItems(false, true); @@ -4055,4 +4086,77 @@ } } +void CustomTrackView::videoOnly() { + resetSelectionGroup(); + QList<QGraphicsItem *> selection = scene()->selectedItems(); + if (selection.isEmpty()) { + emit displayMessage(i18n("You must select one clip for this action"), ErrorMessage); + return; + } + QUndoCommand *videoCommand = new QUndoCommand(); + videoCommand->setText(i18n("Video only")); + for (int i = 0; i < selection.count(); i++) { + if (selection.at(i)->type() == AVWIDGET) { + ClipItem *clip = static_cast <ClipItem *>(selection.at(i)); + if (clip->clipType() == AV || clip->clipType() == PLAYLIST) { + if (clip->parentItem()) { + emit displayMessage(i18n("Cannot change grouped clips"), ErrorMessage); + } else { + new ChangeClipTypeCommand(this, clip->track(), clip->startPos(), true, false, clip->isVideoOnly(), clip->isAudioOnly(), true, videoCommand); + } + } + } + } + m_commandStack->push(videoCommand); +} + +void CustomTrackView::audioOnly() { + resetSelectionGroup(); + QList<QGraphicsItem *> selection = scene()->selectedItems(); + if (selection.isEmpty()) { + emit displayMessage(i18n("You must select one clip for this action"), ErrorMessage); + return; + } + QUndoCommand *videoCommand = new QUndoCommand(); + videoCommand->setText(i18n("Audio only")); + for (int i = 0; i < selection.count(); i++) { + if (selection.at(i)->type() == AVWIDGET) { + ClipItem *clip = static_cast <ClipItem *>(selection.at(i)); + if (clip->clipType() == AV || clip->clipType() == PLAYLIST) { + if (clip->parentItem()) { + emit displayMessage(i18n("Cannot change grouped clips"), ErrorMessage); + } else { + new ChangeClipTypeCommand(this, clip->track(), clip->startPos(), false, true, clip->isVideoOnly(), clip->isAudioOnly(), true, videoCommand); + } + } + } + } + m_commandStack->push(videoCommand); +} + +void CustomTrackView::doChangeClipType(const GenTime &pos, int track, bool videoOnly, bool audioOnly) { + ClipItem *clip = getClipItemAt(pos, track); + if (clip == NULL) { + kDebug() << "// Cannot find clip to split!!!"; + return; + } + if (videoOnly) { + int start = pos.frames(m_document->fps()); + clip->setVideoOnly(true); + clip->setAudioOnly(false); + m_document->renderer()->mltUpdateClipProducer(m_document->tracksCount() - track, start, clip->baseClip()->videoProducer()); + } else if (audioOnly) { + int start = pos.frames(m_document->fps()); + clip->setAudioOnly(true); + clip->setVideoOnly(false); + m_document->renderer()->mltUpdateClipProducer(m_document->tracksCount() - track, start, clip->baseClip()->audioProducer(track)); + } else { + int start = pos.frames(m_document->fps()); + clip->setAudioOnly(false); + clip->setVideoOnly(false); + m_document->renderer()->mltUpdateClipProducer(m_document->tracksCount() - track, start, clip->baseClip()->producer(track)); + } + clip->update(); +} + #include "customtrackview.moc" Modified: trunk/kdenlive/src/customtrackview.h =================================================================== --- trunk/kdenlive/src/customtrackview.h 2009-03-19 23:41:16 UTC (rev 3165) +++ trunk/kdenlive/src/customtrackview.h 2009-03-20 13:20:52 UTC (rev 3166) @@ -115,6 +115,9 @@ void loadGroups(const QDomNodeList groups); void splitAudio(); void doSplitAudio(const GenTime &pos, int track, bool split); + void videoOnly(); + void audioOnly(); + void doChangeClipType(const GenTime &pos, int track, bool videoOnly, bool audioOnly); public slots: void setCursorPos(int pos, bool seek = true); Modified: trunk/kdenlive/src/docclipbase.cpp =================================================================== --- trunk/kdenlive/src/docclipbase.cpp 2009-03-19 23:41:16 UTC (rev 3165) +++ trunk/kdenlive/src/docclipbase.cpp 2009-03-20 13:20:52 UTC (rev 3166) @@ -34,7 +34,7 @@ #include <QCryptographicHash> DocClipBase::DocClipBase(ClipManager *clipManager, QDomElement xml, const QString &id): - m_id(id), m_description(QString()), m_refcount(0), m_audioThumbCreated(false), m_duration(GenTime()), m_thumbProd(NULL), m_audioTimer(NULL), m_properties(QMap <QString, QString> ()), audioFrameChache(QMap<int, QMap<int, QByteArray> > ()), m_baseTrackProducers(QList <Mlt::Producer *>()), m_snapMarkers(QList < CommentedTime > ()), m_videoOnlyProducer(NULL), m_audioOnlyProducer(NULL) { + m_id(id), m_description(QString()), m_refcount(0), m_audioThumbCreated(false), m_duration(GenTime()), m_thumbProd(NULL), m_audioTimer(NULL), m_properties(QMap <QString, QString> ()), audioFrameChache(QMap<int, QMap<int, QByteArray> > ()), m_baseTrackProducers(QList <Mlt::Producer *>()), m_snapMarkers(QList < CommentedTime > ()), m_videoOnlyProducer(NULL), m_audioTrackProducers(QList <Mlt::Producer *>()) { int type = xml.attribute("type").toInt(); m_clipType = (CLIPTYPE) type; @@ -360,12 +360,18 @@ QString id = producer->get("id"); if (id.contains('_')) { // this is a subtrack producer, insert it at correct place - id = id.section('_', 1, 1); - if (id == "audio") { - m_audioOnlyProducer = producer; + id = id.section('_', 1); + if (id.endsWith("audio")) { + int pos = id.section('_', 0, 0).toInt(); + if (pos >= m_audioTrackProducers.count()) { + while (m_audioTrackProducers.count() - 1 < pos) { + m_audioTrackProducers.append(NULL); + } + } + if (m_audioTrackProducers.at(pos) == NULL) m_audioTrackProducers[pos] = producer; return; } - if (id == "video") { + if (id.endsWith("video")) { m_videoOnlyProducer = producer; return; } @@ -385,22 +391,24 @@ if (m_thumbProd && !m_thumbProd->hasProducer()) m_thumbProd->setProducer(producer); } -Mlt::Producer *DocClipBase::audioProducer() { - if (m_audioOnlyProducer == NULL) { - int i; - for (i = 0; i < m_baseTrackProducers.count(); i++) - if (m_baseTrackProducers.at(i) != NULL) break; - if (i >= m_baseTrackProducers.count()) return NULL; - m_audioOnlyProducer = new Mlt::Producer(*m_baseTrackProducers.at(i)->profile(), m_baseTrackProducers.at(i)->get("resource")); - if (m_properties.contains("force_aspect_ratio")) m_audioOnlyProducer->set("force_aspect_ratio", m_properties.value("force_aspect_ratio").toDouble()); - if (m_properties.contains("threads")) m_audioOnlyProducer->set("threads", m_properties.value("threads").toInt()); - m_audioOnlyProducer->set("video_index", -1); - if (m_properties.contains("audio_index")) m_audioOnlyProducer->set("audio_index", m_properties.value("audio_index").toInt()); - char *tmp = (char *) qstrdup(QString(getId() + "_audio").toUtf8().data()); - m_audioOnlyProducer->set("id", tmp); +Mlt::Producer *DocClipBase::audioProducer(int track) { + if (m_audioTrackProducers.count() <= track) { + while (m_audioTrackProducers.count() - 1 < track) { + m_audioTrackProducers.append(NULL); + } + } + if (m_audioTrackProducers.at(track) == NULL) { + Mlt::Producer *base = producer(); + m_audioTrackProducers[track] = new Mlt::Producer(*(base->profile()), base->get("resource")); + if (m_properties.contains("force_aspect_ratio")) m_audioTrackProducers.at(track)->set("force_aspect_ratio", m_properties.value("force_aspect_ratio").toDouble()); + if (m_properties.contains("threads")) m_audioTrackProducers.at(track)->set("threads", m_properties.value("threads").toInt()); + m_audioTrackProducers.at(track)->set("video_index", -1); + if (m_properties.contains("audio_index")) m_audioTrackProducers.at(track)->set("audio_index", m_properties.value("audio_index").toInt()); + char *tmp = (char *) qstrdup(QString(getId() + '_' + QString::number(track) + "_audio").toUtf8().data()); + m_audioTrackProducers.at(track)->set("id", tmp); delete[] tmp; } - return m_audioOnlyProducer; + return m_audioTrackProducers.at(track); } Mlt::Producer *DocClipBase::videoProducer() { Modified: trunk/kdenlive/src/docclipbase.h =================================================================== --- trunk/kdenlive/src/docclipbase.h 2009-03-19 23:41:16 UTC (rev 3165) +++ trunk/kdenlive/src/docclipbase.h 2009-03-20 13:20:52 UTC (rev 3166) @@ -114,7 +114,7 @@ /** Retrieve the producer that shows only video */ Mlt::Producer *videoProducer(); /** Retrieve the producer that shows only audio */ - Mlt::Producer *audioProducer(); + Mlt::Producer *audioProducer(int track); /** Returns true if this clip is a project clip, false otherwise. Overridden in DocClipProject, * where it returns true. */ @@ -186,7 +186,7 @@ * that exist. */ uint m_refcount; QList <Mlt::Producer *> m_baseTrackProducers; - Mlt::Producer *m_audioOnlyProducer; + QList <Mlt::Producer *> m_audioTrackProducers; Mlt::Producer *m_videoOnlyProducer; CLIPTYPE m_clipType; Modified: trunk/kdenlive/src/kdenliveui.rc =================================================================== --- trunk/kdenlive/src/kdenliveui.rc 2009-03-19 23:41:16 UTC (rev 3165) +++ trunk/kdenlive/src/kdenliveui.rc 2009-03-20 13:20:52 UTC (rev 3166) @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE kpartgui SYSTEM "kpartgui.dtd"> -<gui name="kdenlive" version="38"> +<gui name="kdenlive" version="39"> <ToolBar name="extraToolBar" > <text>Extra Toolbar</text> <Action name="project_render" /> @@ -55,7 +55,9 @@ </Menu> <Action name="auto_transition" /> <Action name="split_audio" /> - </Menu> + <Action name="clip_audio_only" /> + <Action name="clip_video_only" /> +</Menu> <Menu name="timeline" ><text>Timeline</text> <Action name="cut_timeline_clip" /> Modified: trunk/kdenlive/src/mainwindow.cpp =================================================================== --- trunk/kdenlive/src/mainwindow.cpp 2009-03-19 23:41:16 UTC (rev 3165) +++ trunk/kdenlive/src/mainwindow.cpp 2009-03-20 13:20:52 UTC (rev 3166) @@ -938,6 +938,14 @@ collection->addAction("split_audio", splitAudio); connect(splitAudio, SIGNAL(triggered(bool)), this, SLOT(slotSplitAudio())); + KAction* audioOnly = new KAction(KIcon("document-new"), i18n("Audio Only"), this); + collection->addAction("clip_audio_only", audioOnly); + connect(audioOnly, SIGNAL(triggered(bool)), this, SLOT(slotAudioOnly())); + + KAction* videoOnly = new KAction(KIcon("document-new"), i18n("Video Only"), this); + collection->addAction("clip_video_only", videoOnly); + connect(videoOnly, SIGNAL(triggered(bool)), this, SLOT(slotVideoOnly())); + KAction *insertSpace = new KAction(KIcon(), i18n("Insert Space"), this); collection->addAction("insert_space", insertSpace); connect(insertSpace, SIGNAL(triggered()), this, SLOT(slotInsertSpace())); @@ -2390,6 +2398,14 @@ if (m_activeTimeline) m_activeTimeline->projectView()->splitAudio(); } +void MainWindow::slotAudioOnly() { + if (m_activeTimeline) m_activeTimeline->projectView()->audioOnly(); +} + +void MainWindow::slotVideoOnly() { + if (m_activeTimeline) m_activeTimeline->projectView()->videoOnly(); +} + void MainWindow::slotDvdWizard(const QString &url, const QString &profile) { DvdWizard *w = new DvdWizard(url, profile, this); w->exec(); Modified: trunk/kdenlive/src/mainwindow.h =================================================================== --- trunk/kdenlive/src/mainwindow.h 2009-03-19 23:41:16 UTC (rev 3165) +++ trunk/kdenlive/src/mainwindow.h 2009-03-20 13:20:52 UTC (rev 3166) @@ -295,6 +295,8 @@ void slotGroupClips(); void slotUnGroupClips(); void slotSplitAudio(); + void slotVideoOnly(); + void slotAudioOnly(); signals: Q_SCRIPTABLE void abortRenderJob(const QString &url); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <j-...@us...> - 2009-03-23 21:29:19
|
Revision: 3174 http://kdenlive.svn.sourceforge.net/kdenlive/?rev=3174&view=rev Author: j-b-m Date: 2009-03-23 21:29:12 +0000 (Mon, 23 Mar 2009) Log Message: ----------- Fix updating of keyframes when resizing a transition, and some bugs in undo Modified Paths: -------------- trunk/kdenlive/src/customtrackview.cpp trunk/kdenlive/src/transition.cpp trunk/kdenlive/src/transition.h trunk/kdenlive/src/transitionsettings.cpp Modified: trunk/kdenlive/src/customtrackview.cpp =================================================================== --- trunk/kdenlive/src/customtrackview.cpp 2009-03-23 20:59:26 UTC (rev 3173) +++ trunk/kdenlive/src/customtrackview.cpp 2009-03-23 21:29:12 UTC (rev 3174) @@ -3027,6 +3027,7 @@ KdenliveSettings::setSnaptopoints(snap); item->updateTransitionEndTrack(getPreviousVideoTrack(end.track)); m_document->renderer()->mltMoveTransition(item->transitionTag(), m_document->tracksCount() - start.track, m_document->tracksCount() - end.track, item->transitionEndTrack(), start.startPos, start.endPos, end.startPos, end.endPos); + if (m_dragItem && m_dragItem == item) emit transitionItemSelected(item); } void CustomTrackView::resizeClip(const ItemInfo start, const ItemInfo end) { Modified: trunk/kdenlive/src/transition.cpp =================================================================== --- trunk/kdenlive/src/transition.cpp 2009-03-23 20:59:26 UTC (rev 3173) +++ trunk/kdenlive/src/transition.cpp 2009-03-23 21:29:12 UTC (rev 3174) @@ -301,3 +301,12 @@ return m_parameters; } +bool Transition::hasGeometry() { + QDomNodeList namenode = m_parameters.elementsByTagName("parameter"); + for (int i = 0;i < namenode.count() ;i++) { + QDomElement pa = namenode.item(i).toElement(); + if (pa.attribute("type") == "geometry") return true; + } + return false; +} + Modified: trunk/kdenlive/src/transition.h =================================================================== --- trunk/kdenlive/src/transition.h 2009-03-23 20:59:26 UTC (rev 3173) +++ trunk/kdenlive/src/transition.h 2009-03-23 21:29:12 UTC (rev 3174) @@ -71,6 +71,7 @@ Transition *clone(); bool isAutomatic() const; void setAutomatic(bool automatic); + bool hasGeometry(); protected: virtual QVariant itemChange(GraphicsItemChange change, const QVariant &value); Modified: trunk/kdenlive/src/transitionsettings.cpp =================================================================== --- trunk/kdenlive/src/transitionsettings.cpp 2009-03-23 20:59:26 UTC (rev 3173) +++ trunk/kdenlive/src/transitionsettings.cpp 2009-03-23 21:29:12 UTC (rev 3174) @@ -74,6 +74,7 @@ } else { // Same transition, we just want to update the parameters value slotUpdateEffectParams(e, e); + if (m_usedTransition->hasGeometry()) emit transferParamDesc(m_usedTransition->toXML(), m_usedTransition->startPos().frames(KdenliveSettings::project_fps()), m_usedTransition->endPos().frames(KdenliveSettings::project_fps())); } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <j-...@us...> - 2009-03-23 22:09:09
|
Revision: 3175 http://kdenlive.svn.sourceforge.net/kdenlive/?rev=3175&view=rev Author: j-b-m Date: 2009-03-23 22:09:07 +0000 (Mon, 23 Mar 2009) Log Message: ----------- Correctly use thumbs settings from new project dialog: http://www.kdenlive.org:80/mantis/view.php?id=716 Modified Paths: -------------- trunk/kdenlive/src/mainwindow.cpp trunk/kdenlive/src/projectsettings.cpp trunk/kdenlive/src/projectsettings.h Modified: trunk/kdenlive/src/mainwindow.cpp =================================================================== --- trunk/kdenlive/src/mainwindow.cpp 2009-03-23 21:29:12 UTC (rev 3174) +++ trunk/kdenlive/src/mainwindow.cpp 2009-03-23 22:09:07 UTC (rev 3175) @@ -1151,6 +1151,10 @@ ProjectSettings *w = new ProjectSettings(projectTracks.x(), projectTracks.y(), KdenliveSettings::defaultprojectfolder(), false, this); if (w->exec() != QDialog::Accepted) return; if (!KdenliveSettings::activatetabs()) closeCurrentDocument(); + KdenliveSettings::setVideothumbnails(w->enableVideoThumbs()); + m_buttonVideoThumbs->setChecked(KdenliveSettings::videothumbnails()); + KdenliveSettings::setAudiothumbnails(w->enableAudioThumbs()); + m_buttonAudioThumbs->setChecked(KdenliveSettings::audiothumbnails()); profileName = w->selectedProfile(); projectFolder = w->selectedFolder(); projectTracks = w->tracks(); Modified: trunk/kdenlive/src/projectsettings.cpp =================================================================== --- trunk/kdenlive/src/projectsettings.cpp 2009-03-23 21:29:12 UTC (rev 3174) +++ trunk/kdenlive/src/projectsettings.cpp 2009-03-23 22:09:07 UTC (rev 3175) @@ -93,6 +93,14 @@ return p; } +bool ProjectSettings::enableVideoThumbs() const { + return m_view.video_thumbs->isChecked(); +} + +bool ProjectSettings::enableAudioThumbs() const { + return m_view.audio_thumbs->isChecked(); +} + #include "projectsettings.moc" Modified: trunk/kdenlive/src/projectsettings.h =================================================================== --- trunk/kdenlive/src/projectsettings.h 2009-03-23 21:29:12 UTC (rev 3174) +++ trunk/kdenlive/src/projectsettings.h 2009-03-23 22:09:07 UTC (rev 3175) @@ -34,6 +34,8 @@ QString selectedProfile() const; KUrl selectedFolder() const; QPoint tracks(); + bool enableVideoThumbs() const; + bool enableAudioThumbs() const; private slots: void slotUpdateDisplay(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <j-...@us...> - 2009-03-24 09:57:55
|
Revision: 3179 http://kdenlive.svn.sourceforge.net/kdenlive/?rev=3179&view=rev Author: j-b-m Date: 2009-03-24 09:57:52 +0000 (Tue, 24 Mar 2009) Log Message: ----------- Add action to show / hide timeline Modified Paths: -------------- trunk/kdenlive/src/kdenliveui.rc trunk/kdenlive/src/mainwindow.cpp trunk/kdenlive/src/mainwindow.h Modified: trunk/kdenlive/src/kdenliveui.rc =================================================================== --- trunk/kdenlive/src/kdenliveui.rc 2009-03-23 23:42:13 UTC (rev 3178) +++ trunk/kdenlive/src/kdenliveui.rc 2009-03-24 09:57:52 UTC (rev 3179) @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE kpartgui SYSTEM "kpartgui.dtd"> -<gui name="kdenlive" version="39"> +<gui name="kdenlive" version="40"> <ToolBar name="extraToolBar" > <text>Extra Toolbar</text> <Action name="project_render" /> @@ -116,6 +116,8 @@ <Action name="mark_out" /> </Menu> <Menu name="dockwindows" ><text>View</text> + <Action name="maximize_current" /> + <Action name="show_timeline" /> </Menu> <Menu name="settings" > <Action name="manage_profiles" /> Modified: trunk/kdenlive/src/mainwindow.cpp =================================================================== --- trunk/kdenlive/src/mainwindow.cpp 2009-03-23 23:42:13 UTC (rev 3178) +++ trunk/kdenlive/src/mainwindow.cpp 2009-03-24 09:57:52 UTC (rev 3179) @@ -987,6 +987,19 @@ pasteEffects->setData("paste_effects"); connect(pasteEffects , SIGNAL(triggered()), this, SLOT(slotPasteEffects())); + QAction *showTimeline = new KAction(i18n("Show Timeline"), this); + collection->addAction("show_timeline", showTimeline); + showTimeline->setCheckable(true); + showTimeline->setChecked(true); + connect(showTimeline, SIGNAL(triggered(bool)), this, SLOT(slotShowTimeline(bool))); + + /*QAction *maxCurrent = new KAction(i18n("Maximize Current Widget"), this); + collection->addAction("maximize_current", maxCurrent); + maxCurrent->setCheckable(true); + maxCurrent->setChecked(false); + connect(maxCurrent, SIGNAL(triggered(bool)), this, SLOT(slotMaximizeCurrent(bool)));*/ + + m_closeAction = KStandardAction::close(this, SLOT(closeCurrentDocument()), collection); KStandardAction::quit(this, SLOT(queryQuit()), collection); @@ -2415,5 +2428,31 @@ w->exec(); } +void MainWindow::slotShowTimeline(bool show) { + if (show == false) { + m_timelineState = saveState(); + centralWidget()->setHidden(true); + } else { + centralWidget()->setHidden(false); + restoreState(m_timelineState); + } +} +void MainWindow::slotMaximizeCurrent(bool show) { + //TODO: is there a way to maximize current widget? + //if (show == true) + { + m_timelineState = saveState(); + QWidget *par = focusWidget()->parentWidget(); + while (par->parentWidget() && par->parentWidget() != this) { + par = par->parentWidget(); + } + kDebug() << "CURRENT WIDGET: " << par->objectName(); + } + /*else { + //centralWidget()->setHidden(false); + //restoreState(m_timelineState); + }*/ +} + #include "mainwindow.moc" Modified: trunk/kdenlive/src/mainwindow.h =================================================================== --- trunk/kdenlive/src/mainwindow.h 2009-03-23 23:42:13 UTC (rev 3178) +++ trunk/kdenlive/src/mainwindow.h 2009-03-24 09:57:52 UTC (rev 3179) @@ -193,6 +193,7 @@ QActionGroup *actionGroup); void aboutPlugins(); QStringList m_pluginFileNames; + QByteArray m_timelineState; public slots: void openFile(const KUrl &url); @@ -297,6 +298,8 @@ void slotSplitAudio(); void slotVideoOnly(); void slotAudioOnly(); + void slotShowTimeline(bool show); + void slotMaximizeCurrent(bool show); signals: Q_SCRIPTABLE void abortRenderJob(const QString &url); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <j-...@us...> - 2009-03-25 20:28:55
|
Revision: 3182 http://kdenlive.svn.sourceforge.net/kdenlive/?rev=3182&view=rev Author: j-b-m Date: 2009-03-25 20:28:48 +0000 (Wed, 25 Mar 2009) Log Message: ----------- Fix several group move issues and spacer bugs Modified Paths: -------------- trunk/kdenlive/src/abstractgroupitem.cpp trunk/kdenlive/src/customtrackview.cpp trunk/kdenlive/src/movegroupcommand.cpp Modified: trunk/kdenlive/src/abstractgroupitem.cpp =================================================================== --- trunk/kdenlive/src/abstractgroupitem.cpp 2009-03-24 17:27:28 UTC (rev 3181) +++ trunk/kdenlive/src/abstractgroupitem.cpp 2009-03-25 20:28:48 UTC (rev 3182) @@ -103,23 +103,25 @@ if (change == ItemPositionChange && scene()) { // calculate new position. const int trackHeight = KdenliveSettings::trackheight(); + QPointF start = sceneBoundingRect().topLeft(); QPointF newPos = value.toPointF(); - int xpos = projectScene()->getSnapPointForPos((int) newPos.x(), KdenliveSettings::snaptopoints()); + int xpos = projectScene()->getSnapPointForPos((int)(start.x() + newPos.x() - scenePos().x() + 0.5), KdenliveSettings::snaptopoints()); + xpos = qMax(xpos, 0); - newPos.setX(xpos); - QPointF start = pos(); - kDebug() << "// GRP MOVE, NEW:" << newPos << ", CURR:" << start; + newPos.setX((int)(scenePos().x() + xpos - (int) start.x())); + //int startTrack = (start.y() + trackHeight / 2) / trackHeight; - int newTrack = (newPos.y()) / trackHeight; - //kDebug()<<"// GROUP NEW T:"<<newTrack<<",START T:"<<startTrack<<",MAX:"<<projectScene()->tracksCount() - 1; + int newTrack = (start.y() + newPos.y() - scenePos().y()) / trackHeight; + int currTrack = start.y() / trackHeight; + int currTrack2 = newPos.y() / trackHeight; + newTrack = qMin(newTrack, projectScene()->tracksCount() - (int)(boundingRect().height() + 5) / trackHeight); newTrack = qMax(newTrack, 0); // Check if top item is a clip or a transition int offset = 0; int topTrack = -1; - kDebug() << "// CHG GRP 1"; QList<QGraphicsItem *> children = childItems(); for (int i = 0; i < children.count(); i++) { int currentTrack = (int)(children.at(i)->scenePos().y() / trackHeight); @@ -135,35 +137,31 @@ } } } - kDebug() << "// CHG GRP 2"; - newPos.setY((int)((newTrack) * trackHeight) + offset); - if (newPos == start) return start; + newPos.setY((int)((currTrack2) * trackHeight) + offset); + //if (newPos == start) return start; - if (newPos.x() < 0) { + /*if (newPos.x() < 0) { // If group goes below 0, adjust position to 0 return QPointF(pos().x() - start.x(), pos().y()); - } - kDebug() << "// CHG GRP 3"; + }*/ QPainterPath shape = groupShape(newPos - pos()); QList<QGraphicsItem*> collindingItems = scene()->items(shape, Qt::IntersectsItemShape); for (int i = 0; i < children.count(); i++) { collindingItems.removeAll(children.at(i)); } - kDebug() << "// CHG GRP 4" << newPos; if (collindingItems.isEmpty()) return newPos; else { - bool forwardMove = newPos.x() > start.x(); + bool forwardMove = xpos > start.x(); int offset = 0; - kDebug() << "// CHG GRP 5"; for (int i = 0; i < collindingItems.count(); i++) { QGraphicsItem *collision = collindingItems.at(i); if (collision->type() == AVWIDGET) { // Collision //kDebug()<<"// COLLISION WIT:"<<collision->sceneBoundingRect(); - if (newPos.y() != start.y()) { + if (newPos.y() != pos().y()) { // Track change results in collision, restore original position - return start; + return pos(); } AbstractClipItem *item = static_cast <AbstractClipItem *>(collision); if (forwardMove) { Modified: trunk/kdenlive/src/customtrackview.cpp =================================================================== --- trunk/kdenlive/src/customtrackview.cpp 2009-03-24 17:27:28 UTC (rev 3181) +++ trunk/kdenlive/src/customtrackview.cpp 2009-03-25 20:28:48 UTC (rev 3182) @@ -651,7 +651,7 @@ m_scene->clearSelection(); for (int i = 0; i < selection.count(); i++) { - if (selection.at(i)->type() == AVWIDGET || selection.at(i)->type() == TRANSITIONWIDGET) { + if (selection.at(i)->type() == AVWIDGET || selection.at(i)->type() == TRANSITIONWIDGET || selection.at(i)->type() == GROUPWIDGET) { selection.at(i)->setSelected(true); } } @@ -810,10 +810,9 @@ // delete selection group bool snap = KdenliveSettings::snaptopoints(); KdenliveSettings::setSnaptopoints(false); + QList<QGraphicsItem *> children = m_selectionGroup->childItems(); - QPointF selectionPos = m_selectionGroup->scenePos(); scene()->destroyItemGroup(m_selectionGroup); - kDebug() << "DESTROY SEL GRP, ITEMS: " << children.count(); for (int i = 0; i < children.count(); i++) { if (children.at(i)->type() == AVWIDGET || children.at(i)->type() == TRANSITIONWIDGET) { if (!static_cast <AbstractClipItem *>(children.at(i))->isItemLocked()) { @@ -823,43 +822,6 @@ } else if (children.at(i)->type() == GROUPWIDGET) { children.at(i)->setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable); children.at(i)->setSelected(selectItems); - - // Rebuild groups or they get corrupted (because of translate / move issues) - AbstractGroupItem *group = static_cast <AbstractGroupItem *>(children.at(i)); - //kDebug()<<"// GRP POS:"<<group->scenePos()<<", SELECT:"<<selectionPos; - if (group->scenePos() != selectionPos) - group->translate(selectionPos.x(), selectionPos.y()); - //group->setPos(-selectionPos.x(), -selectionPos.y()); - QList<QGraphicsItem *> selection = group->childItems(); - m_document->clipManager()->removeGroup(group); - scene()->destroyItemGroup(group); - if (!selection.isEmpty()) { - QPointF top = selection.at(0)->sceneBoundingRect().topLeft(); - - // Find top left position of selection - for (int j = 1; j < selection.count(); j++) { - if (selection.at(j)->type() == AVWIDGET || selection.at(j)->type() == TRANSITIONWIDGET) { - selection.at(j)->setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable); - QPointF currenttop = selection.at(j)->sceneBoundingRect().topLeft(); - //kDebug()<<"// GRP ITEM POS:"<<currenttop; - if (currenttop.x() < top.x()) top.setX(currenttop.x()); - if (currenttop.y() < top.y()) top.setY(currenttop.y()); - } - } - - AbstractGroupItem *newGroup = m_document->clipManager()->createGroup(); - newGroup->translate(-top.x(), -top.y() + 1); - newGroup->setPos(top.x(), top.y() - 1); - scene()->addItem(newGroup); - - for (int j = 0; j < selection.count(); j++) { - if (selection.at(j)->type() == AVWIDGET || selection.at(j)->type() == TRANSITIONWIDGET) { - newGroup->addToGroup(selection.at(j)); - //kDebug()<<"// ADDING ITEM:"<<selection.at(j)->sceneBoundingRect(); - selection.at(j)->setFlags(QGraphicsItem::ItemIsSelectable); - } - } - } } } m_selectionGroup = NULL; @@ -877,7 +839,7 @@ QPointF top = selection.at(0)->sceneBoundingRect().topLeft(); // Find top left position of selection for (int i = 1; i < selection.count(); i++) { - if (selection.at(i)->type() == AVWIDGET || selection.at(i)->type() == TRANSITIONWIDGET) { + if (selection.at(i)->type() == AVWIDGET || selection.at(i)->type() == TRANSITIONWIDGET || selection.at(i)->type() == GROUPWIDGET) { QPointF currenttop = selection.at(i)->sceneBoundingRect().topLeft(); if (currenttop.x() < top.x()) top.setX(currenttop.x()); if (currenttop.y() < top.y()) top.setY(currenttop.y()); @@ -1932,9 +1894,6 @@ ClipItem *clip; Transition *transition; - kDebug() << "/// STARTING SPACE INSERT"; - - // Create lists with start pos for each track QMap <int, int> trackClipStartList; QMap <int, int> trackTransitionStartList; @@ -1945,29 +1904,44 @@ } if (!clipsToMove.isEmpty()) for (int i = 0; i < clipsToMove.count(); i++) { - kDebug() << "/// FETCHING CLIP: " << i; clip = getClipItemAtStart(clipsToMove.at(i).startPos + offset, clipsToMove.at(i).track); if (clip) { - m_selectionGroup->addToGroup(clip); + if (clip->parentItem()) { + m_selectionGroup->addToGroup(clip->parentItem()); + clip->parentItem()->setFlags(QGraphicsItem::ItemIsSelectable); + } else { + m_selectionGroup->addToGroup(clip); + clip->setFlags(QGraphicsItem::ItemIsSelectable); + } if (trackClipStartList.value(m_document->tracksCount() - clipsToMove.at(i).track) == -1 || clipsToMove.at(i).startPos.frames(m_document->fps()) < trackClipStartList.value(m_document->tracksCount() - clipsToMove.at(i).track)) trackClipStartList[m_document->tracksCount() - clipsToMove.at(i).track] = clipsToMove.at(i).startPos.frames(m_document->fps()); - clip->setFlags(QGraphicsItem::ItemIsSelectable); } else emit displayMessage(i18n("Cannot move clip at position %1, track %2", m_document->timecode().getTimecodeFromFrames(clipsToMove.at(i).startPos.frames(m_document->fps())), clipsToMove.at(i).track), ErrorMessage); } if (!transToMove.isEmpty()) for (int i = 0; i < transToMove.count(); i++) { - kDebug() << "/// FETCHING TRANS: " << i; transition = getTransitionItemAtStart(transToMove.at(i).startPos + offset, transToMove.at(i).track); if (transition) { + if (transition->parentItem()) m_selectionGroup->addToGroup(transition->parentItem()); m_selectionGroup->addToGroup(transition); if (trackTransitionStartList.value(m_document->tracksCount() - transToMove.at(i).track) == -1 || transToMove.at(i).startPos.frames(m_document->fps()) < trackTransitionStartList.value(m_document->tracksCount() - transToMove.at(i).track)) trackTransitionStartList[m_document->tracksCount() - transToMove.at(i).track] = transToMove.at(i).startPos.frames(m_document->fps()); transition->setFlags(QGraphicsItem::ItemIsSelectable); } else emit displayMessage(i18n("Cannot move transition at position %1, track %2", m_document->timecode().getTimecodeFromFrames(transToMove.at(i).startPos.frames(m_document->fps())), transToMove.at(i).track), ErrorMessage); } - kDebug() << "/// STARTING SPACE DONE"; m_selectionGroup->translate(diff, 0); + + // update items coordinates + QList<QGraphicsItem *> itemList = scene()->selectedItems(); + for (int i = 0; i < itemList.count(); i++) { + if (itemList.at(i)->type() == AVWIDGET || itemList.at(i)->type() == TRANSITIONWIDGET) { + static_cast < AbstractClipItem *>(itemList.at(i))->updateItem(); + } else if (itemList.at(i)->type() == GROUPWIDGET) { + QList<QGraphicsItem *> children = itemList.at(i)->childItems(); + for (int j = 0; j < children.count(); j++) { + static_cast < AbstractClipItem *>(children.at(j))->updateItem(); + } + } + } resetSelectionGroup(false); - kDebug() << "/// STARTING SPACE DONE2"; if (track != -1) track = m_document->tracksCount() - track; m_document->renderer()->mltInsertSpace(trackClipStartList, trackTransitionStartList, track, duration, offset); } @@ -2051,11 +2025,11 @@ m_dragItem = NULL; return; } else if (m_operationMode == SPACER) { - int track = (int)(mapToScene(m_clickEvent).y() / m_tracksHeight); - if (m_selectionGroup->sceneBoundingRect().height() > m_tracksHeight) { + int track; + if (event->modifiers() != Qt::ControlModifier) { // We are moving all tracks track = -1; - } + } else track = (int)(mapToScene(m_clickEvent).y() / m_tracksHeight); GenTime timeOffset = GenTime(m_selectionGroup->scenePos().x(), m_document->fps()) - m_selectionGroupInfo.startPos; if (timeOffset != GenTime()) { QList<QGraphicsItem *> items = m_selectionGroup->childItems(); @@ -2072,15 +2046,25 @@ trackTransitionStartList[i] = -1; } + int max = items.count(); + for (int i = 0; i < max; i++) { + if (items.at(i)->type() == GROUPWIDGET) + items += static_cast <QGraphicsItemGroup *>(items.at(i))->childItems(); + } + for (int i = 0; i < items.count(); i++) { - AbstractClipItem *item = static_cast <AbstractClipItem *>(items.at(i)); - ItemInfo info = item->info(); - if (item->type() == AVWIDGET) { + if (items.at(i)->type() == AVWIDGET) { + AbstractClipItem *item = static_cast <AbstractClipItem *>(items.at(i)); + ItemInfo info = item->info(); clipsToMove.append(info); + item->updateItem(); if (trackClipStartList.value(m_document->tracksCount() - info.track) == -1 || info.startPos.frames(m_document->fps()) < trackClipStartList.value(m_document->tracksCount() - info.track)) trackClipStartList[m_document->tracksCount() - info.track] = info.startPos.frames(m_document->fps()); - } else if (item->type() == TRANSITIONWIDGET) { + } else if (items.at(i)->type() == TRANSITIONWIDGET) { + AbstractClipItem *item = static_cast <AbstractClipItem *>(items.at(i)); + ItemInfo info = item->info(); transitionsToMove.append(info); + item->updateItem(); if (trackTransitionStartList.value(m_document->tracksCount() - info.track) == -1 || info.startPos.frames(m_document->fps()) < trackTransitionStartList.value(m_document->tracksCount() - info.track)) trackTransitionStartList[m_document->tracksCount() - info.track] = info.startPos.frames(m_document->fps()); } @@ -2089,6 +2073,7 @@ InsertSpaceCommand *command = new InsertSpaceCommand(this, clipsToMove, transitionsToMove, track, timeOffset, false); m_commandStack->push(command); if (track != -1) track = m_document->tracksCount() - track; + kDebug() << "SPACER TRACK:" << track; m_document->renderer()->mltInsertSpace(trackClipStartList, trackTransitionStartList, track, timeOffset, GenTime()); } resetSelectionGroup(false); @@ -2223,8 +2208,8 @@ QList<ItemInfo> transitionsToMove = QList<ItemInfo> (); GenTime timeOffset = GenTime(m_dragItem->scenePos().x(), m_document->fps()) - m_dragItemInfo.startPos; - const int trackOffset = m_dragItem->track() - m_dragItemInfo.track; - kDebug() << "// MOVED SEVERAL CLIPS" << timeOffset.frames(25); + const int trackOffset = (int)(m_dragItem->scenePos().y() / m_tracksHeight) - m_dragItemInfo.track; + //kDebug() << "// MOVED SEVERAL CLIPS" << timeOffset.frames(25); if (timeOffset != GenTime() || trackOffset != 0) { // remove items in MLT playlist @@ -2530,12 +2515,12 @@ } void CustomTrackView::deleteSelectedClips() { + resetSelectionGroup(); QList<QGraphicsItem *> itemList = scene()->selectedItems(); if (itemList.count() == 0) { emit displayMessage(i18n("Select clip to delete"), ErrorMessage); return; } - resetSelectionGroup(); scene()->clearSelection(); QUndoCommand *deleteSelected = new QUndoCommand(); deleteSelected->setText(i18n("Delete selected items")); @@ -2804,7 +2789,9 @@ } ClipItem *CustomTrackView::getClipItemAt(int pos, int track) { - QList<QGraphicsItem *> list = scene()->items(QPointF(pos , track * m_tracksHeight + m_tracksHeight / 2)); + QPointF p(pos, track * m_tracksHeight + m_tracksHeight / 2); + kDebug() << "LKING POINT:" << p; + QList<QGraphicsItem *> list = scene()->items(p); ClipItem *clip = NULL; for (int i = 0; i < list.size(); i++) { if (list.at(i)->type() == AVWIDGET) { @@ -2910,22 +2897,29 @@ void CustomTrackView::moveGroup(QList <ItemInfo> startClip, QList <ItemInfo> startTransition, const GenTime offset, const int trackOffset, bool reverseMove) { // Group Items - kDebug() << "// GROUP MOVE; OFFSET: " << offset.frames(25) << ", TK OFF: " << trackOffset; + kDebug() << "//GRP MOVE, REVERS:" << reverseMove; + kDebug() << "// GROUP MOV; OFFSET: " << offset.frames(25) << ", TK OFF: " << trackOffset; resetSelectionGroup(); m_scene->clearSelection(); - QList <QGraphicsItemGroup *> groups; + QList<QGraphicsItem *> itemList = items(); + for (int i = 0; i < itemList.count(); i++) { + if (itemList.at(i)->type() == AVWIDGET) + kDebug() << "ITEM " << i << ": " << static_cast <AbstractClipItem *>(itemList.at(i))->startPos().frames(25) << ",REEL: " << itemList.at(i)->scenePos(); + } + for (int i = 0; i < startClip.count(); i++) { if (reverseMove) { startClip[i].startPos = startClip.at(i).startPos - offset; startClip[i].track = startClip.at(i).track - trackOffset; } + //kDebug()<<"//LKING FR CLIP AT:"<<startClip.at(i).startPos.frames(25)<<", TK:"<<startClip.at(i).track; ClipItem *clip = getClipItemAt(startClip.at(i).startPos, startClip.at(i).track); if (clip) { clip->setItemLocked(false); if (clip->parentItem()) clip->parentItem()->setSelected(true); else clip->setSelected(true); m_document->renderer()->mltRemoveClip(m_document->tracksCount() - startClip.at(i).track, startClip.at(i).startPos); - } + } else kDebug() << "//MISSING CLIP AT: " << startClip.at(i).startPos.frames(25); } for (int i = 0; i < startTransition.count(); i++) { if (reverseMove) { @@ -2938,26 +2932,18 @@ if (tr->parentItem()) tr->parentItem()->setSelected(true); else tr->setSelected(true); m_document->renderer()->mltDeleteTransition(tr->transitionTag(), tr->transitionEndTrack(), m_document->tracksCount() - startTransition.at(i).track, startTransition.at(i).startPos, startTransition.at(i).endPos, tr->toXML()); - } + } else kDebug() << "//MISSING TRANSITION AT: " << startTransition.at(i).startPos.frames(25); } groupSelectedItems(true); if (m_selectionGroup) { - QPointF pos = m_selectionGroup->pos(); - qreal posx = pos.x() + offset.frames(m_document->fps()); - qreal posy = pos.y() + trackOffset * (qreal) m_tracksHeight; bool snap = KdenliveSettings::snaptopoints(); KdenliveSettings::setSnaptopoints(false); - m_selectionGroup->setPos(posx, posy); + m_selectionGroup->moveBy(offset.frames(m_document->fps()), trackOffset * (qreal) m_tracksHeight); - QPointF top = m_selectionGroup->sceneBoundingRect().topLeft(); - m_selectionGroup->setPos(top); - m_selectionGroupInfo.startPos = GenTime(m_selectionGroup->scenePos().x(), m_document->fps()); - m_selectionGroupInfo.track = m_selectionGroup->track(); + kDebug() << "%% GRP NEW POS: " << m_selectionGroup->scenePos().x(); QList<QGraphicsItem *> children = m_selectionGroup->childItems(); - kDebug() << "// GRP MOVE; FOUND CHILDREN:" << children.count(); - // Expand groups int max = children.count(); for (int i = 0; i < max; i++) { @@ -2965,6 +2951,8 @@ children += children.at(i)->childItems(); } } + kDebug() << "// GRP MOVE; FOUND CHILDREN:" << children.count(); + for (int i = 0; i < children.count(); i++) { // re-add items in correct place if (children.at(i)->type() != AVWIDGET && children.at(i)->type() != TRANSITIONWIDGET) continue; @@ -2984,7 +2972,8 @@ else if (clip->isVideoOnly()) prod = clip->baseClip()->videoProducer(); else prod = clip->baseClip()->producer(info.track); m_document->renderer()->mltInsertClip(info, clip->xml(), prod); - } else { + kDebug() << "// inserting new clp: " << info.startPos.frames(25); + } else if (item->type() == TRANSITIONWIDGET) { Transition *tr = static_cast <Transition*>(item); int newTrack = tr->transitionEndTrack(); kDebug() << "/// TRANSITION CURR TRK: " << newTrack; @@ -2998,8 +2987,14 @@ } } KdenliveSettings::setSnaptopoints(snap); - } + } else kDebug() << "///////// WARNING; NO GROUP TO MOVE"; + kDebug() << "///////// DONE+++++++++++++"; + itemList = items(); + for (int i = 0; i < itemList.count(); i++) { + if (itemList.at(i)->type() == AVWIDGET) + kDebug() << "ITEM " << i << ": " << static_cast <AbstractClipItem *>(itemList.at(i))->startPos().frames(25) << ",REEL: " << itemList.at(i)->scenePos(); + } } void CustomTrackView::moveTransition(const ItemInfo start, const ItemInfo end) { Modified: trunk/kdenlive/src/movegroupcommand.cpp =================================================================== --- trunk/kdenlive/src/movegroupcommand.cpp 2009-03-24 17:27:28 UTC (rev 3181) +++ trunk/kdenlive/src/movegroupcommand.cpp 2009-03-25 20:28:48 UTC (rev 3182) @@ -24,7 +24,7 @@ #include <KLocale> MoveGroupCommand::MoveGroupCommand(CustomTrackView *view, const QList <ItemInfo> startClip, const QList <ItemInfo> startTransition, const GenTime offset, const int trackOffset, bool doIt, QUndoCommand * parent) : QUndoCommand(parent), m_view(view), m_startClip(startClip), m_startTransition(startTransition), m_offset(offset), m_trackOffset(trackOffset), m_doIt(doIt) { - setText(i18n("Move clip")); + setText(i18n("Move group")); } @@ -36,9 +36,8 @@ } // virtual void MoveGroupCommand::redo() { - kDebug() << "---- redoing action"; if (m_doIt) - m_view->moveGroup(m_startClip, m_startTransition, m_offset, m_trackOffset); + m_view->moveGroup(m_startClip, m_startTransition, m_offset, m_trackOffset, false); m_doIt = true; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <j-...@us...> - 2009-03-25 22:02:49
|
Revision: 3184 http://kdenlive.svn.sourceforge.net/kdenlive/?rev=3184&view=rev Author: j-b-m Date: 2009-03-25 22:02:43 +0000 (Wed, 25 Mar 2009) Log Message: ----------- Several move & resize fixes Modified Paths: -------------- trunk/kdenlive/src/abstractclipitem.cpp trunk/kdenlive/src/abstractgroupitem.cpp trunk/kdenlive/src/clipitem.cpp trunk/kdenlive/src/customtrackview.cpp Modified: trunk/kdenlive/src/abstractclipitem.cpp =================================================================== --- trunk/kdenlive/src/abstractclipitem.cpp 2009-03-25 20:42:31 UTC (rev 3183) +++ trunk/kdenlive/src/abstractclipitem.cpp 2009-03-25 22:02:43 UTC (rev 3184) @@ -85,14 +85,15 @@ if (m_cropDuration > GenTime(3, m_fps)) durationDiff = GenTime(3, m_fps); else return; } - + //kDebug()<<"// DURATION DIFF: "<<durationDiff.frames(25)<<", POS: "<<pos().x(); m_startPos += durationDiff; if (type() == AVWIDGET) m_cropStart += durationDiff * speed; m_cropDuration = m_cropDuration - durationDiff * speed; setRect(0, 0, cropDuration().frames(m_fps) - 0.02, rect().height()); - setPos(m_startPos.frames(m_fps), pos().y()); - if ((int) pos().x() != posx) { + moveBy(durationDiff.frames(m_fps), 0); + //setPos(m_startPos.frames(m_fps), pos().y()); + if ((int) scenePos().x() != posx) { //kDebug()<<"////// WARNING, DIFF IN XPOS: "<<pos().x()<<" == "<<m_startPos.frames(m_fps); GenTime diff = GenTime((int) pos().x() - posx, m_fps); if (type() == AVWIDGET) m_cropStart = m_cropStart + diff; Modified: trunk/kdenlive/src/abstractgroupitem.cpp =================================================================== --- trunk/kdenlive/src/abstractgroupitem.cpp 2009-03-25 20:42:31 UTC (rev 3183) +++ trunk/kdenlive/src/abstractgroupitem.cpp 2009-03-25 22:02:43 UTC (rev 3184) @@ -105,20 +105,23 @@ const int trackHeight = KdenliveSettings::trackheight(); QPointF start = sceneBoundingRect().topLeft(); QPointF newPos = value.toPointF(); - int xpos = projectScene()->getSnapPointForPos((int)(start.x() + newPos.x() - scenePos().x() + 0.5), KdenliveSettings::snaptopoints()); + //kDebug()<<"REAL:"<<start.x()<<", PROPOSED:"<<(int)(start.x() - pos().x() + newPos.x()); + int xpos = projectScene()->getSnapPointForPos((int)(start.x() + newPos.x() - pos().x()), KdenliveSettings::snaptopoints()); xpos = qMax(xpos, 0); - newPos.setX((int)(scenePos().x() + xpos - (int) start.x())); + //kDebug()<<"GRP XPOS:"<<xpos<<", START:"<<start.x()<<",NEW:"<<newPos.x()<<"; SCENE:"<<scenePos().x()<<",POS:"<<pos().x(); + newPos.setX((int)(pos().x() + xpos - (int) start.x())); //int startTrack = (start.y() + trackHeight / 2) / trackHeight; - int newTrack = (start.y() + newPos.y() - scenePos().y()) / trackHeight; - int currTrack = start.y() / trackHeight; - int currTrack2 = newPos.y() / trackHeight; + int realTrack = (start.y() + newPos.y() - pos().y()) / trackHeight; + int proposedTrack = newPos.y() / trackHeight; - newTrack = qMin(newTrack, projectScene()->tracksCount() - (int)(boundingRect().height() + 5) / trackHeight); - newTrack = qMax(newTrack, 0); + int correctedTrack = qMin(realTrack, projectScene()->tracksCount() - (int)(boundingRect().height() + 5) / trackHeight); + correctedTrack = qMax(correctedTrack, 0); + proposedTrack += (correctedTrack - realTrack); + // Check if top item is a clip or a transition int offset = 0; int topTrack = -1; @@ -137,7 +140,7 @@ } } } - newPos.setY((int)((currTrack2) * trackHeight) + offset); + newPos.setY((int)((proposedTrack) * trackHeight) + offset); //if (newPos == start) return start; /*if (newPos.x() < 0) { Modified: trunk/kdenlive/src/clipitem.cpp =================================================================== --- trunk/kdenlive/src/clipitem.cpp 2009-03-25 20:42:31 UTC (rev 3183) +++ trunk/kdenlive/src/clipitem.cpp 2009-03-25 22:02:43 UTC (rev 3184) @@ -1057,7 +1057,7 @@ QVariant ClipItem::itemChange(GraphicsItemChange change, const QVariant &value) { if (change == ItemPositionChange && scene()) { // calculate new position. - if (parentItem()) return pos(); + //if (parentItem()) return pos(); QPointF newPos = value.toPointF(); //kDebug() << "/// MOVING CLIP ITEM.------------\n++++++++++"; int xpos = projectScene()->getSnapPointForPos((int) newPos.x(), KdenliveSettings::snaptopoints()); Modified: trunk/kdenlive/src/customtrackview.cpp =================================================================== --- trunk/kdenlive/src/customtrackview.cpp 2009-03-25 20:42:31 UTC (rev 3183) +++ trunk/kdenlive/src/customtrackview.cpp 2009-03-25 22:02:43 UTC (rev 3184) @@ -2344,7 +2344,17 @@ } } - + if (m_dragItem->parentItem() && m_dragItem->parentItem() != m_selectionGroup) { + // Item was resized, rebuild group; + AbstractGroupItem *group = static_cast <AbstractGroupItem *>(m_dragItem->parentItem()); + QList <QGraphicsItem *> children = group->childItems(); + m_document->clipManager()->removeGroup(group); + scene()->destroyItemGroup(group); + for (int i = 0; i < children.count(); i++) { + children.at(i)->setSelected(true); + } + groupSelectedItems(false, true); + } //m_document->renderer()->doRefresh(); } else if (m_operationMode == RESIZEEND && m_dragItem->endPos() != m_dragItemInfo.endPos) { // resize end @@ -2395,6 +2405,17 @@ m_commandStack->push(command); } } + if (m_dragItem->parentItem() && m_dragItem->parentItem() != m_selectionGroup) { + // Item was resized, rebuild group; + AbstractGroupItem *group = static_cast <AbstractGroupItem *>(m_dragItem->parentItem()); + QList <QGraphicsItem *> children = group->childItems(); + m_document->clipManager()->removeGroup(group); + scene()->destroyItemGroup(group); + for (int i = 0; i < children.count(); i++) { + children.at(i)->setSelected(true); + } + groupSelectedItems(false, true); + } //m_document->renderer()->doRefresh(); } else if (m_operationMode == FADEIN) { // resize fade in effect @@ -2626,10 +2647,9 @@ for (int i = 0; i < itemList.count(); i++) { if (itemList.at(i)->type() == AVWIDGET) { ClipItem *item = static_cast <ClipItem *>(itemList.at(i)); - if (item->parentItem() && item->parentItem() != m_selectionGroup) { - emit displayMessage(i18n("Cannot cut a clip in a group"), ErrorMessage); - } - else if (currentPos > item->startPos() && currentPos < item->endPos()) { + if (item->parentItem() && item->parentItem() != m_selectionGroup) { + emit displayMessage(i18n("Cannot cut a clip in a group"), ErrorMessage); + } else if (currentPos > item->startPos() && currentPos < item->endPos()) { RazorClipCommand *command = new RazorClipCommand(this, item->info(), currentPos, true); m_commandStack->push(command); } @@ -2797,9 +2817,7 @@ } ClipItem *CustomTrackView::getClipItemAt(int pos, int track) { - QPointF p(pos, track * m_tracksHeight + m_tracksHeight / 2); - kDebug() << "LKING POINT:" << p; - QList<QGraphicsItem *> list = scene()->items(p); + QList<QGraphicsItem *> list = scene()->items(QPointF(pos, track * m_tracksHeight + m_tracksHeight / 2)); ClipItem *clip = NULL; for (int i = 0; i < list.size(); i++) { if (list.at(i)->type() == AVWIDGET) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <j-...@us...> - 2009-03-25 23:45:23
|
Revision: 3185 http://kdenlive.svn.sourceforge.net/kdenlive/?rev=3185&view=rev Author: j-b-m Date: 2009-03-25 23:45:12 +0000 (Wed, 25 Mar 2009) Log Message: ----------- Use pixel size for titles font instead of point size (hope it doesn't mess up existing titles): http://www.kdenlive.org:80/mantis/view.php?id=732 Modified Paths: -------------- trunk/kdenlive/src/titledocument.cpp trunk/kdenlive/src/titlewidget.cpp Modified: trunk/kdenlive/src/titledocument.cpp =================================================================== --- trunk/kdenlive/src/titledocument.cpp 2009-03-25 22:02:43 UTC (rev 3184) +++ trunk/kdenlive/src/titledocument.cpp 2009-03-25 23:45:12 UTC (rev 3185) @@ -14,18 +14,23 @@ * (at your option) any later version. * * * ***************************************************************************/ + #include "titledocument.h" + +#include <KDebug> +#include <KTemporaryFile> +#include <kio/netaccess.h> + #include <QGraphicsScene> #include <QDomElement> #include <QGraphicsItem> #include <QGraphicsRectItem> #include <QGraphicsTextItem> #include <QGraphicsSvgItem> -#include <KDebug> +#include <QFontInfo> #include <QFile> -#include <KTemporaryFile> -#include <kio/netaccess.h> + TitleDocument::TitleDocument() { scene = NULL; } @@ -65,12 +70,14 @@ case 8: e.setAttribute("type", "QGraphicsTextItem"); t = static_cast<QGraphicsTextItem *>(item); + // Don't save empty text nodes + if (t->toPlainText().simplified().isEmpty()) continue; //content.appendChild(doc.createTextNode(((QGraphicsTextItem*)item)->toHtml())); content.appendChild(doc.createTextNode(t->toPlainText())); font = t->font(); content.setAttribute("font", font.family()); content.setAttribute("font-bold", font.bold()); - content.setAttribute("font-size", font.pointSize()); + content.setAttribute("font-pixel-size", font.pixelSize()); content.setAttribute("font-italic", font.italic()); content.setAttribute("font-underline", font.underline()); content.setAttribute("font-color", colorToString(t->defaultTextColor())); @@ -183,12 +190,19 @@ int zValue = items.item(i).attributes().namedItem("z-index").nodeValue().toInt(); if (zValue > -1000) if (items.item(i).attributes().namedItem("type").nodeValue() == "QGraphicsTextItem") { - QFont font(items.item(i).namedItem("content").attributes().namedItem("font").nodeValue()); - font.setBold(items.item(i).namedItem("content").attributes().namedItem("font-bold").nodeValue().toInt()); - font.setItalic(items.item(i).namedItem("content").attributes().namedItem("font-italic").nodeValue().toInt()); - font.setUnderline(items.item(i).namedItem("content").attributes().namedItem("font-underline").nodeValue().toInt()); - font.setPointSize(items.item(i).namedItem("content").attributes().namedItem("font-size").nodeValue().toInt()); - QColor col(stringToColor(items.item(i).namedItem("content").attributes().namedItem("font-color").nodeValue())); + QDomNamedNodeMap txtProperties = items.item(i).namedItem("content").attributes(); + QFont font(txtProperties.namedItem("font").nodeValue()); + font.setBold(txtProperties.namedItem("font-bold").nodeValue().toInt()); + font.setItalic(txtProperties.namedItem("font-italic").nodeValue().toInt()); + font.setUnderline(txtProperties.namedItem("font-underline").nodeValue().toInt()); + // Older Kdenlive version did not store pixel size but point size + if (txtProperties.namedItem("font-pixel-size").isNull()) { + QFont f2; + f2.setPointSize(txtProperties.namedItem("font-size").nodeValue().toInt()); + font.setPixelSize(QFontInfo(f2).pixelSize()); + } + else font.setPixelSize(txtProperties.namedItem("font-pixel-size").nodeValue().toInt()); + QColor col(stringToColor(txtProperties.namedItem("font-color").nodeValue())); QGraphicsTextItem *txt = scene->addText(items.item(i).namedItem("content").firstChild().nodeValue(), font); txt->setDefaultTextColor(col); txt->setTextInteractionFlags(Qt::NoTextInteraction); Modified: trunk/kdenlive/src/titlewidget.cpp =================================================================== --- trunk/kdenlive/src/titlewidget.cpp 2009-03-25 22:02:43 UTC (rev 3184) +++ trunk/kdenlive/src/titlewidget.cpp 2009-03-25 23:45:12 UTC (rev 3185) @@ -374,7 +374,7 @@ void TitleWidget::slotNewText(QGraphicsTextItem *tt) { QFont font = font_family->currentFont(); - font.setPointSize(font_size->value()); + font.setPixelSize(font_size->value()); // mbd: issue 551: font.setBold(buttonBold->isChecked()); font.setItalic(buttonItalic->isChecked()); @@ -428,7 +428,7 @@ QFont font = i->font(); font_family->setCurrentFont(font); - font_size->setValue(font.pointSize()); + font_size->setValue(font.pixelSize()); buttonBold->setChecked(font.bold()); buttonItalic->setChecked(font.italic()); buttonUnder->setChecked(font.underline()); @@ -523,7 +523,7 @@ void TitleWidget::slotUpdateText() { QFont font = font_family->currentFont(); - font.setPointSize(font_size->value()); + font.setPixelSize(font_size->value()); font.setBold(buttonBold->isChecked()); font.setItalic(buttonItalic->isChecked()); font.setUnderline(buttonUnder->isChecked()); @@ -721,7 +721,8 @@ KConfigGroup titleConfig(config, "TitleWidget"); // Write the entries titleConfig.writeEntry("font_family", font_family->currentFont()); - titleConfig.writeEntry("font_size", font_size->value()); + //titleConfig.writeEntry("font_size", font_size->value()); + titleConfig.writeEntry("font_pixel_size", font_size->value()); titleConfig.writeEntry("font_color", fontColorButton->color()); titleConfig.writeEntry("font_alpha", textAlpha->value()); titleConfig.writeEntry("font_bold", buttonBold->isChecked()); @@ -748,7 +749,7 @@ KConfigGroup titleConfig(config, "TitleWidget"); // read the entries font_family->setCurrentFont(titleConfig.readEntry("font_family", font_family->currentFont())); - font_size->setValue(titleConfig.readEntry("font_size", font_size->value())); + font_size->setValue(titleConfig.readEntry("font_pixel_size", font_size->value())); fontColorButton->setColor(titleConfig.readEntry("font_color", fontColorButton->color())); textAlpha->setValue(titleConfig.readEntry("font_alpha", textAlpha->value())); buttonBold->setChecked(titleConfig.readEntry("font_bold", buttonBold->isChecked())); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <j-...@us...> - 2009-03-30 17:09:20
|
Revision: 3187 http://kdenlive.svn.sourceforge.net/kdenlive/?rev=3187&view=rev Author: j-b-m Date: 2009-03-30 17:09:09 +0000 (Mon, 30 Mar 2009) Log Message: ----------- Fix crash when adding clip to project: http://www.kdenlive.org:80/mantis/view.php?id=738 Modified Paths: -------------- trunk/kdenlive/src/docclipbase.cpp trunk/kdenlive/src/docclipbase.h Modified: trunk/kdenlive/src/docclipbase.cpp =================================================================== --- trunk/kdenlive/src/docclipbase.cpp 2009-03-28 08:57:26 UTC (rev 3186) +++ trunk/kdenlive/src/docclipbase.cpp 2009-03-30 17:09:09 UTC (rev 3187) @@ -585,7 +585,7 @@ m_properties.remove(key); } -void DocClipBase::getFileHash(const QString &url) { +void DocClipBase::getFileHash(const QString url) { if (m_clipType == SLIDESHOW) return; QFile file(url); if (file.open(QIODevice::ReadOnly)) { // write size and hash only if resource points to a file Modified: trunk/kdenlive/src/docclipbase.h =================================================================== --- trunk/kdenlive/src/docclipbase.h 2009-03-28 08:57:26 UTC (rev 3186) +++ trunk/kdenlive/src/docclipbase.h 2009-03-30 17:09:09 UTC (rev 3187) @@ -212,7 +212,7 @@ void slotCreateAudioTimer(); void slotRefreshProducer(); void setProducerProperty(const char *name, int data); - void getFileHash(const QString &url); + void getFileHash(const QString url); public slots: void updateAudioThumbnail(QMap<int, QMap<int, QByteArray> > data); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <j-...@us...> - 2009-03-30 20:28:27
|
Revision: 3188 http://kdenlive.svn.sourceforge.net/kdenlive/?rev=3188&view=rev Author: j-b-m Date: 2009-03-30 20:28:19 +0000 (Mon, 30 Mar 2009) Log Message: ----------- Fix wrong usage of QDomElement, which will help with bug: http://www.kdenlive.org:80/mantis/view.php?id=738 Modified Paths: -------------- trunk/kdenlive/src/clipmanager.cpp trunk/kdenlive/src/kdenlivedoc.cpp trunk/kdenlive/src/mainwindow.cpp trunk/kdenlive/src/projectlist.cpp trunk/kdenlive/src/projectlist.h trunk/kdenlive/src/projectlistview.cpp trunk/kdenlive/src/projectlistview.h Modified: trunk/kdenlive/src/clipmanager.cpp =================================================================== --- trunk/kdenlive/src/clipmanager.cpp 2009-03-30 17:09:09 UTC (rev 3187) +++ trunk/kdenlive/src/clipmanager.cpp 2009-03-30 20:28:19 UTC (rev 3188) @@ -214,6 +214,7 @@ if (KIO::NetAccess::exists(file, KIO::NetAccess::SourceSide, NULL)) { QDomDocument doc; QDomElement prod = doc.createElement("producer"); + doc.appendChild(prod); if (!group.isEmpty()) { prod.setAttribute("groupname", group); prod.setAttribute("groupid", groupId); @@ -227,7 +228,7 @@ prod.setAttribute("in", "0"); prod.setAttribute("out", m_doc->getFramePos(KdenliveSettings::image_duration()) - 1); } - new AddClipCommand(m_doc, prod, QString::number(id), true, addClips); + new AddClipCommand(m_doc, doc.documentElement(), QString::number(id), true, addClips); } } m_doc->commandStack()->push(addClips); @@ -237,6 +238,7 @@ kDebug() << "///// CLIP MANAGER, ADDING CLIP: " << url; QDomDocument doc; QDomElement prod = doc.createElement("producer"); + doc.appendChild(prod); prod.setAttribute("resource", url.path()); uint id = m_clipIdCounter++; prod.setAttribute("id", QString::number(id)); @@ -250,13 +252,14 @@ prod.setAttribute("in", "0"); prod.setAttribute("out", m_doc->getFramePos(KdenliveSettings::image_duration()) - 1); } - AddClipCommand *command = new AddClipCommand(m_doc, prod, QString::number(id), true); + AddClipCommand *command = new AddClipCommand(m_doc, doc.documentElement(), QString::number(id), true); m_doc->commandStack()->push(command); } void ClipManager::slotAddColorClipFile(const QString name, const QString color, QString duration, const QString group, const QString &groupId) { QDomDocument doc; QDomElement prod = doc.createElement("producer"); + doc.appendChild(prod); prod.setAttribute("mlt_service", "colour"); prod.setAttribute("colour", color); prod.setAttribute("type", (int) COLOR); @@ -269,13 +272,14 @@ prod.setAttribute("groupname", group); prod.setAttribute("groupid", groupId); } - AddClipCommand *command = new AddClipCommand(m_doc, prod, QString::number(id), true); + AddClipCommand *command = new AddClipCommand(m_doc, doc.documentElement(), QString::number(id), true); m_doc->commandStack()->push(command); } void ClipManager::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, QString group, const QString &groupId) { QDomDocument doc; QDomElement prod = doc.createElement("producer"); + doc.appendChild(prod); prod.setAttribute("resource", path); prod.setAttribute("type", (int) SLIDESHOW); uint id = m_clipIdCounter++; @@ -293,7 +297,7 @@ prod.setAttribute("groupname", group); prod.setAttribute("groupid", groupId); } - AddClipCommand *command = new AddClipCommand(m_doc, prod, QString::number(id), true); + AddClipCommand *command = new AddClipCommand(m_doc, doc.documentElement(), QString::number(id), true); m_doc->commandStack()->push(command); } @@ -302,6 +306,7 @@ 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"); + doc.appendChild(prod); prod.setAttribute("resource", imagePath); prod.setAttribute("titlename", titleName); prod.setAttribute("xmldata", xml); @@ -315,7 +320,7 @@ prod.setAttribute("transparency", "1"); prod.setAttribute("in", "0"); prod.setAttribute("out", m_doc->getFramePos(KdenliveSettings::image_duration()) - 1); - AddClipCommand *command = new AddClipCommand(m_doc, prod, QString::number(id), true); + AddClipCommand *command = new AddClipCommand(m_doc, doc.documentElement(), QString::number(id), true); m_doc->commandStack()->push(command); } Modified: trunk/kdenlive/src/kdenlivedoc.cpp =================================================================== --- trunk/kdenlive/src/kdenlivedoc.cpp 2009-03-30 17:09:09 UTC (rev 3187) +++ trunk/kdenlive/src/kdenlivedoc.cpp 2009-03-30 20:28:19 UTC (rev 3188) @@ -1283,8 +1283,7 @@ if (elem.attribute("type").toInt() == SLIDESHOW) { extension = KUrl(path).fileName(); path = KUrl(path).directory(); - } - if (elem.attribute("type").toInt() == TEXT && !QFile::exists(path)) { + } else if (elem.attribute("type").toInt() == TEXT && QFile::exists(path) == false) { kDebug() << "// TITLE: " << elem.attribute("titlename") << " Preview file: " << elem.attribute("resource") << " DOES NOT EXIST"; QString titlename = elem.attribute("titlename"); QString titleresource; @@ -1306,7 +1305,8 @@ pix.save(titleresource); elem.setAttribute("resource", titleresource); delete dia_ui; - } else if (!path.isEmpty() && !QFile::exists(path) && elem.attribute("type").toInt() != TEXT) { + } + if (path.isEmpty() == false && QFile::exists(path) == false && elem.attribute("type").toInt() != TEXT) { kDebug() << "// FOUND MISSING CLIP: " << path << ", TYPE: " << elem.attribute("type").toInt(); const QString size = elem.attribute("file_size"); const QString hash = elem.attribute("file_hash"); Modified: trunk/kdenlive/src/mainwindow.cpp =================================================================== --- trunk/kdenlive/src/mainwindow.cpp 2009-03-30 17:09:09 UTC (rev 3187) +++ trunk/kdenlive/src/mainwindow.cpp 2009-03-30 20:28:19 UTC (rev 3188) @@ -456,7 +456,7 @@ KUrl clipUrl = iGenerator->generatedClip(action->data().toString(), m_activeDocument->projectFolder(), QStringList(), QStringList(), 25, 720, 576); if (!clipUrl.isEmpty()) { - m_projectList->slotAddClip(clipUrl); + m_projectList->slotAddClip(QList <QUrl> () << clipUrl); } } Modified: trunk/kdenlive/src/projectlist.cpp =================================================================== --- trunk/kdenlive/src/projectlist.cpp 2009-03-30 17:09:09 UTC (rev 3187) +++ trunk/kdenlive/src/projectlist.cpp 2009-03-30 20:28:19 UTC (rev 3188) @@ -82,7 +82,7 @@ connect(listView, SIGNAL(pauseMonitor()), this, SLOT(slotPauseMonitor())); connect(listView, SIGNAL(requestMenu(const QPoint &, QTreeWidgetItem *)), this, SLOT(slotContextMenu(const QPoint &, QTreeWidgetItem *))); connect(listView, SIGNAL(addClip()), this, SLOT(slotAddClip())); - connect(listView, SIGNAL(addClip(KUrl, const QString &)), this, SLOT(slotAddClip(KUrl, const QString &))); + connect(listView, SIGNAL(addClip(const QList <QUrl>, const QString &)), this, SLOT(slotAddClip(const QList <QUrl>, const QString &))); connect(listView, SIGNAL(itemChanged(QTreeWidgetItem *, int)), this, SLOT(slotItemEdited(QTreeWidgetItem *, int))); connect(listView, SIGNAL(showProperties(DocClipBase *)), this, SIGNAL(showClipProperties(DocClipBase *))); @@ -534,12 +534,15 @@ QTimer::singleShot(500, this, SLOT(slotCheckForEmptyQueue())); } -void ProjectList::slotAddClip(KUrl givenUrl, QString group) { +void ProjectList::slotAddClip(const QList <QUrl> givenList, QString group) { if (!m_commandStack) kDebug() << "!!!!!!!!!!!!!!!! NO CMD STK"; KUrl::List list; - if (givenUrl.isEmpty()) { + if (givenList.isEmpty()) { list = KFileDialog::getOpenUrls(KUrl("kfiledialog:///clipfolder"), "application/x-kdenlive video/x-flv application/vnd.rn-realmedia video/x-dv video/dv video/x-msvideo video/x-matroska 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-tga 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 audio/x-flac audio/mp4 video/x-matroska audio/x-matroska", this); - } else list.append(givenUrl); + } else { + for (int i = 0; i < givenList.count(); i++) + list << givenList.at(i); + } if (list.isEmpty()) return; QString groupId; Modified: trunk/kdenlive/src/projectlist.h =================================================================== --- trunk/kdenlive/src/projectlist.h 2009-03-30 17:09:09 UTC (rev 3187) +++ trunk/kdenlive/src/projectlist.h 2009-03-30 20:28:19 UTC (rev 3188) @@ -138,7 +138,7 @@ void slotRemoveInvalidClip(const QString &id); void slotSelectClip(const QString &ix); void slotRemoveClip(); - void slotAddClip(KUrl givenUrl = KUrl(), QString group = QString()); + void slotAddClip(const QList <QUrl> givenList = QList <QUrl> (), QString group = QString()); void slotAddFolder(const QString foldername, const QString &clipId, bool remove, bool edit = false); void slotResetProjectList(); void slotOpenClip(); Modified: trunk/kdenlive/src/projectlistview.cpp =================================================================== --- trunk/kdenlive/src/projectlistview.cpp 2009-03-30 17:09:09 UTC (rev 3187) +++ trunk/kdenlive/src/projectlistview.cpp 2009-03-30 20:28:19 UTC (rev 3188) @@ -138,10 +138,7 @@ else if (item->parent() && ((ProjectItem *) item->parent())->isGroup()) groupName = item->parent()->text(1); } - const QList <QUrl> list = event->mimeData()->urls(); - foreach(const QUrl &url, list) { - emit addClip(KUrl(url), groupName); - } + emit addClip(event->mimeData()->urls(), groupName); } else if (event->mimeData()->hasFormat("kdenlive/producerslist")) { ProjectItem *item = static_cast <ProjectItem *>(itemAt(event->pos())); Modified: trunk/kdenlive/src/projectlistview.h =================================================================== --- trunk/kdenlive/src/projectlistview.h 2009-03-30 17:09:09 UTC (rev 3187) +++ trunk/kdenlive/src/projectlistview.h 2009-03-30 20:28:19 UTC (rev 3188) @@ -60,7 +60,7 @@ signals: void requestMenu(const QPoint &, QTreeWidgetItem *); void addClip(); - void addClip(KUrl, const QString &); + void addClip(const QList <QUrl>, const QString &); void showProperties(DocClipBase *); void focusMonitor(); void pauseMonitor(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <j-...@us...> - 2009-03-30 20:57:17
|
Revision: 3189 http://kdenlive.svn.sourceforge.net/kdenlive/?rev=3189&view=rev Author: j-b-m Date: 2009-03-30 20:57:07 +0000 (Mon, 30 Mar 2009) Log Message: ----------- small typo fix + cleanup Modified Paths: -------------- trunk/kdenlive/src/effectslist.cpp trunk/kdenlive/src/effectslist.h Modified: trunk/kdenlive/src/effectslist.cpp =================================================================== --- trunk/kdenlive/src/effectslist.cpp 2009-03-30 20:28:19 UTC (rev 3188) +++ trunk/kdenlive/src/effectslist.cpp 2009-03-30 20:57:07 UTC (rev 3189) @@ -1,5 +1,5 @@ /*************************************************************************** - docclipbaseiterator.cpp - description + effectslist.cpp - description ------------------- begin : Sat Aug 10 2002 copyright : (C) 2002 by Jason Wood Modified: trunk/kdenlive/src/effectslist.h =================================================================== --- trunk/kdenlive/src/effectslist.h 2009-03-30 20:28:19 UTC (rev 3188) +++ trunk/kdenlive/src/effectslist.h 2009-03-30 20:57:07 UTC (rev 3189) @@ -1,5 +1,5 @@ /*************************************************************************** - docclipbaseiterator.h - description + effectslist.h - description ------------------- begin : Sat Aug 10 2002 copyright : (C) 2002 by Jason Wood @@ -19,6 +19,7 @@ #define EFFECTSLIST_H #include <QList> +#include <QDomElement> /**A List for DocClipBase objects. Use this instead of QList<DocClipBase> so as to sort lists correctly. * Also contains the ability to set a "master clip", which can be used by a number of operations where @@ -26,7 +27,6 @@ * @author Jason Wood */ -#include <QDomElement> class EffectsList: public QList < QDomElement > { public: This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <j-...@us...> - 2009-03-30 20:59:29
|
Revision: 3190 http://kdenlive.svn.sourceforge.net/kdenlive/?rev=3190&view=rev Author: j-b-m Date: 2009-03-30 20:59:19 +0000 (Mon, 30 Mar 2009) Log Message: ----------- Cleanup + fix another QDomDocument usage Modified Paths: -------------- trunk/kdenlive/src/kdenlivedoc.cpp trunk/kdenlive/src/kdenlivedoc.h trunk/kdenlive/src/projectlistview.cpp Modified: trunk/kdenlive/src/kdenlivedoc.cpp =================================================================== --- trunk/kdenlive/src/kdenlivedoc.cpp 2009-03-30 20:57:07 UTC (rev 3189) +++ trunk/kdenlive/src/kdenlivedoc.cpp 2009-03-30 20:59:19 UTC (rev 3190) @@ -325,22 +325,22 @@ void KdenliveDoc::syncGuides(QList <Guide *> guides) { - QDomDocument doc; - QDomElement e; m_guidesXml.clear(); - m_guidesXml = doc.createElement("guides"); + QDomElement guideNode = m_guidesXml.createElement("guides"); + m_guidesXml.appendChild(guideNode); + QDomElement e; for (int i = 0; i < guides.count(); i++) { - e = doc.createElement("guide"); + e = m_guidesXml.createElement("guide"); e.setAttribute("time", guides.at(i)->position().ms() / 1000); e.setAttribute("comment", guides.at(i)->label()); - m_guidesXml.appendChild(e); + guideNode.appendChild(e); } emit guidesUpdated(); } QDomElement KdenliveDoc::guidesXml() const { - return m_guidesXml; + return m_guidesXml.documentElement(); } void KdenliveDoc::slotAutoSave() { @@ -986,7 +986,7 @@ addedXml.appendChild(markers); // Add guides - if (!m_guidesXml.isNull()) addedXml.appendChild(sceneList.importNode(m_guidesXml, true)); + if (!m_guidesXml.isNull()) addedXml.appendChild(sceneList.importNode(m_guidesXml.documentElement(), true)); // Add clip groups addedXml.appendChild(sceneList.importNode(m_clipManager->groupsXml(), true)); @@ -1206,14 +1206,6 @@ return result; } - -QDomDocument KdenliveDoc::generateSceneList() { - QDomDocument doc; - QDomElement westley = doc.createElement("westley"); - doc.appendChild(westley); - QDomElement prod = doc.createElement("producer"); -} - QDomDocument KdenliveDoc::toXml() { return m_document; } Modified: trunk/kdenlive/src/kdenlivedoc.h =================================================================== --- trunk/kdenlive/src/kdenlivedoc.h 2009-03-30 20:57:07 UTC (rev 3189) +++ trunk/kdenlive/src/kdenlivedoc.h 2009-03-30 20:59:19 UTC (rev 3190) @@ -64,7 +64,7 @@ void setProducerDuration(const QString &id, int duration); int getProducerDuration(const QString &id); Render *renderer(); - QDomElement m_guidesXml; + QDomDocument m_guidesXml; QDomElement guidesXml() const; ClipManager *clipManager(); void addClip(QDomElement elem, QString clipId, bool createClipItem = true); @@ -128,7 +128,6 @@ Timecode m_timecode; Render *m_render; QUndoStack *m_commandStack; - QDomDocument generateSceneList(); ClipManager *m_clipManager; MltVideoProfile m_profile; QTimer *m_autoSaveTimer; Modified: trunk/kdenlive/src/projectlistview.cpp =================================================================== --- trunk/kdenlive/src/projectlistview.cpp 2009-03-30 20:57:07 UTC (rev 3189) +++ trunk/kdenlive/src/projectlistview.cpp 2009-03-30 20:59:19 UTC (rev 3190) @@ -214,7 +214,6 @@ if (clickItem) { QDrag *drag = new QDrag(this); QMimeData *mimeData = new QMimeData; - QDomDocument doc; const QList <QTreeWidgetItem *> list = selectedItems(); QStringList ids; foreach(const QTreeWidgetItem *item, list) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <j-...@us...> - 2009-03-30 22:44:29
|
Revision: 3191 http://kdenlive.svn.sourceforge.net/kdenlive/?rev=3191&view=rev Author: j-b-m Date: 2009-03-30 22:44:17 +0000 (Mon, 30 Mar 2009) Log Message: ----------- Make sure there is no write error when saving a file: http://www.kdenlive.org/mantis/view.php?id=717 Modified Paths: -------------- trunk/kdenlive/src/kdenlivedoc.cpp trunk/kdenlive/src/mainwindow.cpp trunk/kdenlive/src/profilesdialog.cpp trunk/kdenlive/src/renderer.cpp trunk/kdenlive/src/renderer.h trunk/kdenlive/src/renderwidget.cpp trunk/kdenlive/src/titledocument.cpp trunk/kdenlive/src/titlewidget.cpp Modified: trunk/kdenlive/src/kdenlivedoc.cpp =================================================================== --- trunk/kdenlive/src/kdenlivedoc.cpp 2009-03-30 20:59:19 UTC (rev 3190) +++ trunk/kdenlive/src/kdenlivedoc.cpp 2009-03-30 22:44:17 UTC (rev 3191) @@ -1002,6 +1002,11 @@ QTextStream out(&file); out << sceneList.toString(); + if (file.error() != QFile::NoError) { + KMessageBox::error(kapp->activeWindow(), i18n("Cannot write to file %1", path)); + file.close(); + return false; + } file.close(); return true; } Modified: trunk/kdenlive/src/mainwindow.cpp =================================================================== --- trunk/kdenlive/src/mainwindow.cpp 2009-03-30 20:59:19 UTC (rev 3190) +++ trunk/kdenlive/src/mainwindow.cpp 2009-03-30 22:44:17 UTC (rev 3191) @@ -1205,7 +1205,7 @@ switch (KMessageBox::warningYesNoCancel(this, i18n("Save changes to document ?"))) { case KMessageBox::Yes : // save document here. If saving fails, return false; - saveFile(); + if (saveFile() == false) return; break; case KMessageBox::Cancel : return; @@ -1571,7 +1571,7 @@ // Generate script file QFile file(scriptExport); if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) { - m_messageLabel->setMessage(i18n("Cannot write to file %1", scriptExport), ErrorMessage); + KMessageBox::error(this, i18n("Cannot write to file %1", scriptExport)); return; } @@ -1580,6 +1580,11 @@ out << "SOURCE=" << "\"" + scriptExport + ".westley\"" << "\n"; out << "TARGET=" << "\"" + dest + "\"" << "\n"; out << renderer << " " << args.join(" ") << "\n" << "\n"; + if (file.error() != QFile::NoError) { + KMessageBox::error(this, i18n("Cannot write to file %1", scriptExport)); + file.close(); + return; + } file.close(); QFile::setPermissions(scriptExport, file.permissions() | QFile::ExeUser); } Modified: trunk/kdenlive/src/profilesdialog.cpp =================================================================== --- trunk/kdenlive/src/profilesdialog.cpp 2009-03-30 20:59:19 UTC (rev 3190) +++ trunk/kdenlive/src/profilesdialog.cpp 2009-03-30 22:44:17 UTC (rev 3191) @@ -155,6 +155,9 @@ } QTextStream out(&file); out << "description=" << m_view.description->text() << "\n" << "frame_rate_num=" << m_view.frame_num->value() << "\n" << "frame_rate_den=" << m_view.frame_den->value() << "\n" << "width=" << m_view.size_w->value() << "\n" << "height=" << m_view.size_h->value() << "\n" << "progressive=" << m_view.progressive->isChecked() << "\n" << "sample_aspect_num=" << m_view.aspect_num->value() << "\n" << "sample_aspect_den=" << m_view.aspect_den->value() << "\n" << "display_aspect_num=" << m_view.display_num->value() << "\n" << "display_aspect_den=" << m_view.display_den->value() << "\n"; + if (file.error() != QFile::NoError) { + KMessageBox::error(this, i18n("Cannot write to file %1", path)); + } file.close(); } Modified: trunk/kdenlive/src/renderer.cpp =================================================================== --- trunk/kdenlive/src/renderer.cpp 2009-03-30 20:59:19 UTC (rev 3190) +++ trunk/kdenlive/src/renderer.cpp 2009-03-30 22:44:17 UTC (rev 3191) @@ -854,7 +854,7 @@ return playlist; } -void Render::saveSceneList(QString path, QDomElement kdenliveData) { +bool Render::saveSceneList(QString path, QDomElement kdenliveData) { QFile file(path); QDomDocument doc; doc.setContent(sceneList(), false); @@ -865,11 +865,16 @@ } if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) { kWarning() << "////// ERROR writing to file: " << path; - return; + return false; } QTextStream out(&file); out << doc.toString(); + if (file.error() != QFile::NoError) { + file.close(); + return false; + } file.close(); + return true; } Modified: trunk/kdenlive/src/renderer.h =================================================================== --- trunk/kdenlive/src/renderer.h 2009-03-30 20:59:19 UTC (rev 3190) +++ trunk/kdenlive/src/renderer.h 2009-03-30 22:44:17 UTC (rev 3191) @@ -93,7 +93,7 @@ void setSceneList(QString playlist, int position = 0); void setProducer(Mlt::Producer *producer, int position); const QString sceneList(); - void saveSceneList(QString path, QDomElement kdenliveData = QDomElement()); + bool saveSceneList(QString path, QDomElement kdenliveData = QDomElement()); /** Wraps the VEML command of the same name. Tells the renderer to play the current scene at the speed specified, relative to normal Modified: trunk/kdenlive/src/renderwidget.cpp =================================================================== --- trunk/kdenlive/src/renderwidget.cpp 2009-03-30 20:59:19 UTC (rev 3190) +++ trunk/kdenlive/src/renderwidget.cpp 2009-03-30 22:44:17 UTC (rev 3191) @@ -318,6 +318,11 @@ } QTextStream out(&file); out << doc.toString(); + if (file.error() != QFile::NoError) { + KMessageBox::error(this, i18n("Cannot write to file %1", exportFile)); + file.close(); + return; + } file.close(); parseProfiles(newMetaGroupId, newGroupName, newProfileName); } @@ -410,18 +415,21 @@ profiles.appendChild(profileElement); //QCString save = doc.toString().utf8(); - + delete d; if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) { - KMessageBox::sorry(this, i18n("Unable to write to file %1", exportFile)); - delete d; + KMessageBox::error(this, i18n("Cannot write to file %1", exportFile)); return; } QTextStream out(&file); out << doc.toString(); + if (file.error() != QFile::NoError) { + KMessageBox::error(this, i18n("Cannot write to file %1", exportFile)); + file.close(); + return; + } file.close(); parseProfiles(newMetaGroupId, newGroupName, newProfileName); - } - delete d; + } else delete d; } void RenderWidget::slotDeleteProfile(bool refresh) { @@ -473,6 +481,11 @@ } QTextStream out(&file); out << doc.toString(); + if (file.error() != QFile::NoError) { + KMessageBox::error(this, i18n("Cannot write to file %1", exportFile)); + file.close(); + return; + } file.close(); if (refresh) { parseProfiles(metaGroupId, currentGroup); Modified: trunk/kdenlive/src/titledocument.cpp =================================================================== --- trunk/kdenlive/src/titledocument.cpp 2009-03-30 20:59:19 UTC (rev 3190) +++ trunk/kdenlive/src/titledocument.cpp 2009-03-30 22:44:17 UTC (rev 3191) @@ -70,8 +70,8 @@ case 8: e.setAttribute("type", "QGraphicsTextItem"); t = static_cast<QGraphicsTextItem *>(item); - // Don't save empty text nodes - if (t->toPlainText().simplified().isEmpty()) continue; + // Don't save empty text nodes + if (t->toPlainText().simplified().isEmpty()) continue; //content.appendChild(doc.createTextNode(((QGraphicsTextItem*)item)->toHtml())); content.appendChild(doc.createTextNode(t->toPlainText())); font = t->font(); @@ -150,13 +150,19 @@ QDomDocument doc = xml(startv, endv); KTemporaryFile tmpfile; - if (!tmpfile.open()) kWarning() << "///// CANNOT CREATE TMP FILE in: " << tmpfile.fileName(); + if (!tmpfile.open()) { + kWarning() << "///// CANNOT CREATE TMP FILE in: " << tmpfile.fileName(); + return false; + } QFile xmlf(tmpfile.fileName()); xmlf.open(QIODevice::WriteOnly); xmlf.write(doc.toString().toUtf8()); + if (xmlf.error() != QFile::NoError) { + xmlf.close(); + return false; + } xmlf.close(); - kDebug() << KIO::NetAccess::upload(tmpfile.fileName(), url, 0); - return true; + return KIO::NetAccess::upload(tmpfile.fileName(), url, 0); } int TitleDocument::loadDocument(const KUrl& url, QGraphicsPolygonItem* startv, QGraphicsPolygonItem* endv) { @@ -190,18 +196,17 @@ int zValue = items.item(i).attributes().namedItem("z-index").nodeValue().toInt(); if (zValue > -1000) if (items.item(i).attributes().namedItem("type").nodeValue() == "QGraphicsTextItem") { - QDomNamedNodeMap txtProperties = items.item(i).namedItem("content").attributes(); + QDomNamedNodeMap txtProperties = items.item(i).namedItem("content").attributes(); QFont font(txtProperties.namedItem("font").nodeValue()); font.setBold(txtProperties.namedItem("font-bold").nodeValue().toInt()); font.setItalic(txtProperties.namedItem("font-italic").nodeValue().toInt()); font.setUnderline(txtProperties.namedItem("font-underline").nodeValue().toInt()); - // Older Kdenlive version did not store pixel size but point size - if (txtProperties.namedItem("font-pixel-size").isNull()) { - QFont f2; - f2.setPointSize(txtProperties.namedItem("font-size").nodeValue().toInt()); - font.setPixelSize(QFontInfo(f2).pixelSize()); - } - else font.setPixelSize(txtProperties.namedItem("font-pixel-size").nodeValue().toInt()); + // Older Kdenlive version did not store pixel size but point size + if (txtProperties.namedItem("font-pixel-size").isNull()) { + QFont f2; + f2.setPointSize(txtProperties.namedItem("font-size").nodeValue().toInt()); + font.setPixelSize(QFontInfo(f2).pixelSize()); + } else font.setPixelSize(txtProperties.namedItem("font-pixel-size").nodeValue().toInt()); QColor col(stringToColor(txtProperties.namedItem("font-color").nodeValue())); QGraphicsTextItem *txt = scene->addText(items.item(i).namedItem("content").firstChild().nodeValue(), font); txt->setDefaultTextColor(col); Modified: trunk/kdenlive/src/titlewidget.cpp =================================================================== --- trunk/kdenlive/src/titlewidget.cpp 2009-03-30 20:59:19 UTC (rev 3190) +++ trunk/kdenlive/src/titlewidget.cpp 2009-03-30 22:44:17 UTC (rev 3191) @@ -22,6 +22,7 @@ #include <KGlobalSettings> #include <KFileDialog> #include <KStandardDirs> +#include <KMessageBox> #include <QDomDocument> #include <QGraphicsItem> @@ -666,7 +667,10 @@ void TitleWidget::saveTitle(KUrl url) { if (url.isEmpty()) url = KFileDialog::getSaveUrl(KUrl(m_projectPath), "*.kdenlivetitle", this, i18n("Save Title")); - if (!url.isEmpty()) m_titledocument.saveDocument(url, startViewport, endViewport); + if (!url.isEmpty()) { + if (m_titledocument.saveDocument(url, startViewport, endViewport) == false) + KMessageBox::error(this, i18n("Cannot write to file %1", url.path())); + } } QDomDocument TitleWidget::xml() { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <j-...@us...> - 2009-03-31 14:10:51
|
Revision: 3194 http://kdenlive.svn.sourceforge.net/kdenlive/?rev=3194&view=rev Author: j-b-m Date: 2009-03-31 14:10:46 +0000 (Tue, 31 Mar 2009) Log Message: ----------- Cleanup ruler painting Modified Paths: -------------- trunk/kdenlive/src/customruler.cpp trunk/kdenlive/src/customruler.h trunk/kdenlive/src/smallruler.cpp trunk/kdenlive/src/smallruler.h Modified: trunk/kdenlive/src/customruler.cpp =================================================================== --- trunk/kdenlive/src/customruler.cpp 2009-03-31 08:03:20 UTC (rev 3193) +++ trunk/kdenlive/src/customruler.cpp 2009-03-31 14:10:46 UTC (rev 3194) @@ -56,6 +56,8 @@ : QWidget(parent), m_timecode(tc), m_view(parent), m_duration(0), m_offset(0) { setFont(KGlobalSettings::toolBarFont()); m_scale = 3; + m_bgColor = QColor(245, 245, 245); + m_zoneColor = QColor(133, 255, 143); littleMarkDistance = FRAME_SIZE; mediumMarkDistance = FRAME_SIZE * m_timecode.fps(); bigMarkDistance = FRAME_SIZE * m_timecode.fps() * 60; @@ -223,12 +225,13 @@ p.setClipRect(e->rect()); const int projectEnd = (int)(m_duration * m_factor); - p.fillRect(QRect(0, 0, projectEnd - m_offset, height()), QBrush(QColor(245, 245, 245))); + p.fillRect(0, 0, projectEnd - m_offset, height(), m_bgColor); const int zoneStart = (int)(m_zoneStart * m_factor); const int zoneEnd = (int)(m_zoneEnd * m_factor); + const QRect zoneRect(); - p.fillRect(QRect(zoneStart - offset(), height() / 2, zoneEnd - zoneStart, height() / 2), QBrush(QColor(133, 255, 143))); + p.fillRect(zoneStart - offset(), height() / 2, zoneEnd - zoneStart, height() / 2, m_zoneColor); const int value = m_view->cursorPos() * m_factor - offset(); int minval = (e->rect().left() + m_offset) / FRAME_SIZE - 1; Modified: trunk/kdenlive/src/customruler.h =================================================================== --- trunk/kdenlive/src/customruler.h 2009-03-31 08:03:20 UTC (rev 3193) +++ trunk/kdenlive/src/customruler.h 2009-03-31 14:10:46 UTC (rev 3194) @@ -53,6 +53,8 @@ int m_zoneStart; int m_zoneEnd; int m_duration; + QColor m_bgColor; + QColor m_zoneColor; double m_textSpacing; double m_factor; double m_scale; Modified: trunk/kdenlive/src/smallruler.cpp =================================================================== --- trunk/kdenlive/src/smallruler.cpp 2009-03-31 08:03:20 UTC (rev 3193) +++ trunk/kdenlive/src/smallruler.cpp 2009-03-31 14:10:46 UTC (rev 3194) @@ -29,6 +29,7 @@ : QWidget(parent), m_scale(1), m_maxval(25) { m_zoneStart = 10; m_zoneEnd = 60; + m_zoneColor = QColor(133, 255, 143); } void SmallRuler::adjustScale(int maximum) { @@ -124,7 +125,7 @@ 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))); + p.fillRect(zoneStart, height() / 2, zoneEnd - zoneStart, height() / 2, m_zoneColor); if (r.top() < 9) { // draw the little marks Modified: trunk/kdenlive/src/smallruler.h =================================================================== --- trunk/kdenlive/src/smallruler.h 2009-03-31 08:03:20 UTC (rev 3193) +++ trunk/kdenlive/src/smallruler.h 2009-03-31 14:10:46 UTC (rev 3194) @@ -47,6 +47,7 @@ int m_maxval; int m_zoneStart; int m_zoneEnd; + QColor m_zoneColor; public slots: void slotNewValue(int value); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ble...@us...> - 2009-03-31 21:30:40
|
Revision: 3200 http://kdenlive.svn.sourceforge.net/kdenlive/?rev=3200&view=rev Author: blendamedt Date: 2009-03-31 21:30:24 +0000 (Tue, 31 Mar 2009) Log Message: ----------- Patches from Ray Lehtiniemi - Missing include guards in a header file - Add braces and update indentation to clarify ambiguous if/else Modified Paths: -------------- trunk/kdenlive/src/parameterplotter.h trunk/kdenlive/src/titledocument.cpp Modified: trunk/kdenlive/src/parameterplotter.h =================================================================== --- trunk/kdenlive/src/parameterplotter.h 2009-03-31 18:37:09 UTC (rev 3199) +++ trunk/kdenlive/src/parameterplotter.h 2009-03-31 21:30:24 UTC (rev 3200) @@ -15,6 +15,9 @@ * * ***************************************************************************/ +#ifndef _PARAMETERPLOTTER_H_ +#define _PARAMETERPLOTTER_H_ + #include <KPlotWidget> #include <QDomElement> #include <QMap> @@ -58,3 +61,5 @@ void parameterList(QStringList); }; + +#endif Modified: trunk/kdenlive/src/titledocument.cpp =================================================================== --- trunk/kdenlive/src/titledocument.cpp 2009-03-31 18:37:09 UTC (rev 3199) +++ trunk/kdenlive/src/titledocument.cpp 2009-03-31 21:30:24 UTC (rev 3200) @@ -194,7 +194,7 @@ QGraphicsItem *gitem = NULL; kDebug() << items.item(i).attributes().namedItem("type").nodeValue(); int zValue = items.item(i).attributes().namedItem("z-index").nodeValue().toInt(); - if (zValue > -1000) + if (zValue > -1000) { if (items.item(i).attributes().namedItem("type").nodeValue() == "QGraphicsTextItem") { QDomNamedNodeMap txtProperties = items.item(i).namedItem("content").attributes(); QFont font(txtProperties.namedItem("font").nodeValue()); @@ -212,29 +212,27 @@ txt->setDefaultTextColor(col); txt->setTextInteractionFlags(Qt::NoTextInteraction); gitem = txt; - } else - if (items.item(i).attributes().namedItem("type").nodeValue() == "QGraphicsRectItem") { - QString rect = items.item(i).namedItem("content").attributes().namedItem("rect").nodeValue(); - QString br_str = items.item(i).namedItem("content").attributes().namedItem("brushcolor").nodeValue(); - QString pen_str = items.item(i).namedItem("content").attributes().namedItem("pencolor").nodeValue(); - double penwidth = items.item(i).namedItem("content").attributes().namedItem("penwidth").nodeValue().toDouble(); - QGraphicsRectItem *rec = scene->addRect(stringToRect(rect), QPen(QBrush(stringToColor(pen_str)), penwidth), QBrush(stringToColor(br_str))); - gitem = rec; - } else - if (items.item(i).attributes().namedItem("type").nodeValue() == "QGraphicsPixmapItem") { - QString url = items.item(i).namedItem("content").attributes().namedItem("url").nodeValue(); - QPixmap pix(url); - QGraphicsPixmapItem *rec = scene->addPixmap(pix); - rec->setData(Qt::UserRole, url); - gitem = rec; - } else - if (items.item(i).attributes().namedItem("type").nodeValue() == "QGraphicsSvgItem") { - QString url = items.item(i).namedItem("content").attributes().namedItem("url").nodeValue(); - QGraphicsSvgItem *rec = new QGraphicsSvgItem(url); - scene->addItem(rec); - rec->setData(Qt::UserRole, url); - gitem = rec; - } + } else if (items.item(i).attributes().namedItem("type").nodeValue() == "QGraphicsRectItem") { + QString rect = items.item(i).namedItem("content").attributes().namedItem("rect").nodeValue(); + QString br_str = items.item(i).namedItem("content").attributes().namedItem("brushcolor").nodeValue(); + QString pen_str = items.item(i).namedItem("content").attributes().namedItem("pencolor").nodeValue(); + double penwidth = items.item(i).namedItem("content").attributes().namedItem("penwidth").nodeValue().toDouble(); + QGraphicsRectItem *rec = scene->addRect(stringToRect(rect), QPen(QBrush(stringToColor(pen_str)), penwidth), QBrush(stringToColor(br_str))); + gitem = rec; + } else if (items.item(i).attributes().namedItem("type").nodeValue() == "QGraphicsPixmapItem") { + QString url = items.item(i).namedItem("content").attributes().namedItem("url").nodeValue(); + QPixmap pix(url); + QGraphicsPixmapItem *rec = scene->addPixmap(pix); + rec->setData(Qt::UserRole, url); + gitem = rec; + } else if (items.item(i).attributes().namedItem("type").nodeValue() == "QGraphicsSvgItem") { + QString url = items.item(i).namedItem("content").attributes().namedItem("url").nodeValue(); + QGraphicsSvgItem *rec = new QGraphicsSvgItem(url); + scene->addItem(rec); + rec->setData(Qt::UserRole, url); + gitem = rec; + } + } //pos and transform if (gitem) { QPointF p(items.item(i).namedItem("position").attributes().namedItem("x").nodeValue().toDouble(), This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <gr...@us...> - 2009-04-01 17:27:01
|
Revision: 3201 http://kdenlive.svn.sourceforge.net/kdenlive/?rev=3201&view=rev Author: granjow Date: 2009-04-01 17:26:37 +0000 (Wed, 01 Apr 2009) Log Message: ----------- dvd, iso, mlt uppercase Modified Paths: -------------- trunk/kdenlive/src/dvdwizard.cpp trunk/kdenlive/src/mainwindow.cpp trunk/kdenlive/src/widgets/configenv_ui.ui trunk/kdenlive/src/widgets/dvdwizardiso_ui.ui trunk/kdenlive/src/wizard.cpp Modified: trunk/kdenlive/src/dvdwizard.cpp =================================================================== --- trunk/kdenlive/src/dvdwizard.cpp 2009-03-31 21:30:24 UTC (rev 3200) +++ trunk/kdenlive/src/dvdwizard.cpp 2009-04-01 17:26:37 UTC (rev 3201) @@ -438,7 +438,7 @@ // Check if DVD structure has the necessary infos if (!QFile::exists(m_iso.tmp_folder->url().path() + "/DVD/VIDEO_TS/VIDEO_TS.IFO")) { - m_status.error_log->setText(m_creationLog + '\n' + i18n("Dvd structure broken")); + m_status.error_log->setText(m_creationLog + '\n' + i18n("DVD structure broken")); m_status.error_box->setHidden(false); kDebug() << "DVDAuthor process crashed"; authitem->setIcon(KIcon("dialog-close")); @@ -489,7 +489,7 @@ if (iso.exists()) { KIO::NetAccess::del(m_iso.iso_image->url(), this); } - m_status.error_log->setText(m_creationLog + '\n' + i18n("Dvd iso is broken")); + m_status.error_log->setText(m_creationLog + '\n' + i18n("DVD ISO is broken")); m_status.error_box->setHidden(false); isoitem->setIcon(KIcon("dialog-close")); cleanup(); @@ -500,7 +500,7 @@ kDebug() << "ISO IMAGE " << m_iso.iso_image->url().path() << " Successfully created"; cleanup(); kDebug() << m_creationLog; - KMessageBox::information(this, i18n("DVD iso image %1 successfully created.", m_iso.iso_image->url().path())); + KMessageBox::information(this, i18n("DVD ISO image %1 successfully created.", m_iso.iso_image->url().path())); } Modified: trunk/kdenlive/src/mainwindow.cpp =================================================================== --- trunk/kdenlive/src/mainwindow.cpp 2009-03-31 21:30:24 UTC (rev 3200) +++ trunk/kdenlive/src/mainwindow.cpp 2009-04-01 17:26:37 UTC (rev 3201) @@ -813,7 +813,7 @@ collection->addAction("monitor_loop_zone", m_loopZone); connect(m_loopZone, SIGNAL(triggered(bool)), m_monitorManager, SLOT(slotLoopZone())); - KAction *dvdWizard = new KAction(KIcon("media-optical"), i18n("Dvd Wizard"), this); + KAction *dvdWizard = new KAction(KIcon("media-optical"), i18n("DVD Wizard"), this); collection->addAction("dvd_wizard", dvdWizard); connect(dvdWizard, SIGNAL(triggered(bool)), this, SLOT(slotDvdWizard())); Modified: trunk/kdenlive/src/widgets/configenv_ui.ui =================================================================== --- trunk/kdenlive/src/widgets/configenv_ui.ui 2009-03-31 21:30:24 UTC (rev 3200) +++ trunk/kdenlive/src/widgets/configenv_ui.ui 2009-04-01 17:26:37 UTC (rev 3201) @@ -24,13 +24,13 @@ </property> <widget class="QWidget" name="tab" > <attribute name="title" > - <string>Mlt environment</string> + <string>MLT environment</string> </attribute> <layout class="QGridLayout" name="gridLayout_4" > <item row="0" column="0" > <widget class="QLabel" name="label" > <property name="text" > - <string>Mlt profiles folder</string> + <string>MLT profiles folder</string> </property> </widget> </item> Modified: trunk/kdenlive/src/widgets/dvdwizardiso_ui.ui =================================================================== --- trunk/kdenlive/src/widgets/dvdwizardiso_ui.ui 2009-03-31 21:30:24 UTC (rev 3200) +++ trunk/kdenlive/src/widgets/dvdwizardiso_ui.ui 2009-04-01 17:26:37 UTC (rev 3201) @@ -26,7 +26,7 @@ <item row="1" column="0" > <widget class="QLabel" name="label_2" > <property name="text" > - <string>Dvd iso image</string> + <string>DVD ISO image</string> </property> </widget> </item> Modified: trunk/kdenlive/src/wizard.cpp =================================================================== --- trunk/kdenlive/src/wizard.cpp 2009-03-31 21:30:24 UTC (rev 3200) +++ trunk/kdenlive/src/wizard.cpp 2009-04-01 17:26:37 UTC (rev 3201) @@ -317,7 +317,7 @@ else item->setIcon(0, m_okIcon); item = new QTreeWidgetItem(m_check.programList, QStringList() << QString() << i18n("Mkisofs")); - item->setData(1, Qt::UserRole, i18n("Required for creation of DVD iso images")); + item->setData(1, Qt::UserRole, i18n("Required for creation of DVD ISO images")); item->setSizeHint(0, itemSize); if (KStandardDirs::findExe("mkisofs").isEmpty()) item->setIcon(0, m_badIcon); else item->setIcon(0, m_okIcon); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <j-...@us...> - 2009-04-04 21:53:29
|
Revision: 3213 http://kdenlive.svn.sourceforge.net/kdenlive/?rev=3213&view=rev Author: j-b-m Date: 2009-04-04 21:53:26 +0000 (Sat, 04 Apr 2009) Log Message: ----------- * Update to the "video only / audio only" options in clip menu * Force saving kdenlive documents in UTF-8 format Modified Paths: -------------- trunk/kdenlive/src/clipitem.cpp trunk/kdenlive/src/customtrackview.cpp trunk/kdenlive/src/customtrackview.h trunk/kdenlive/src/dvdwizard.cpp trunk/kdenlive/src/kdenlivedoc.cpp trunk/kdenlive/src/kdenliveui.rc trunk/kdenlive/src/mainwindow.cpp trunk/kdenlive/src/mainwindow.h trunk/kdenlive/src/monitor.cpp Modified: trunk/kdenlive/src/clipitem.cpp =================================================================== --- trunk/kdenlive/src/clipitem.cpp 2009-04-04 20:48:12 UTC (rev 3212) +++ trunk/kdenlive/src/clipitem.cpp 2009-04-04 21:53:26 UTC (rev 3213) @@ -43,8 +43,8 @@ setRect(0, 0, (info.endPos - info.startPos).frames(fps) - 0.02, (double)(KdenliveSettings::trackheight() - 2)); setPos(info.startPos.frames(fps), (double)(info.track * KdenliveSettings::trackheight()) + 1); - m_videoPix = KIcon("video-x-generic").pixmap(QSize(15, 15)); - m_audioPix = KIcon("audio-x-generic").pixmap(QSize(15, 15)); + m_videoPix = KIcon("kdenlive-show-video").pixmap(QSize(16, 16)); + m_audioPix = KIcon("kdenlive-show-audio").pixmap(QSize(16, 16)); if (m_speed == 1.0) m_clipName = clip->name(); else { @@ -501,7 +501,7 @@ void ClipItem::slotGotAudioData() { audioThumbReady = true; - if (m_clipType == AV) { + if (m_clipType == AV && !isAudioOnly()) { QRectF r = boundingRect(); r.setTop(r.top() + r.height() / 2 - 1); update(r); @@ -626,7 +626,7 @@ } // draw audio thumbnails - if (KdenliveSettings::audiothumbnails() && m_speed == 1.0 && !isVideoOnly() && ((m_clipType == AV && exposed.bottom() > (itemHeight / 2)) || m_clipType == AUDIO) && audioThumbReady) { + if (KdenliveSettings::audiothumbnails() && m_speed == 1.0 && !isVideoOnly() && ((m_clipType == AV && (exposed.bottom() > (itemHeight / 2) || isAudioOnly())) || m_clipType == AUDIO) && audioThumbReady) { double startpixel = exposed.left(); if (startpixel < 0) @@ -1494,6 +1494,7 @@ m_audioOnly = force; if (m_audioOnly) setBrush(QColor(141, 215, 166)); else setBrush(QColor(141, 166, 215)); + audioThumbCachePic.clear(); } bool ClipItem::isAudioOnly() const Modified: trunk/kdenlive/src/customtrackview.cpp =================================================================== --- trunk/kdenlive/src/customtrackview.cpp 2009-04-04 20:48:12 UTC (rev 3212) +++ trunk/kdenlive/src/customtrackview.cpp 2009-04-04 21:53:26 UTC (rev 3213) @@ -125,10 +125,11 @@ m_document->setModified(true); } -void CustomTrackView::setContextMenu(QMenu *timeline, QMenu *clip, QMenu *transition) +void CustomTrackView::setContextMenu(QMenu *timeline, QMenu *clip, QMenu *transition, QActionGroup *clipTypeGroup) { m_timelineContextMenu = timeline; m_timelineContextClipMenu = clip; + m_clipTypeGroup = clipTypeGroup; QList <QAction *> list = m_timelineContextClipMenu->actions(); for (int i = 0; i < list.count(); i++) { if (list.at(i)->data().toString() == "change_speed") m_changeSpeedAction = list.at(i); @@ -646,6 +647,7 @@ m_scene->clearSelection(); event->accept(); emit clipItemSelected(NULL); + updateClipTypeActions(NULL); if (m_tool == SPACERTOOL) { QList<QGraphicsItem *> selection; if (event->modifiers() == Qt::ControlModifier) { @@ -742,8 +744,10 @@ bool selected = !m_dragItem->isSelected(); if (dragGroup) dragGroup->setSelected(selected); else m_dragItem->setSelected(selected); + groupSelectedItems(); ClipItem *clip = static_cast <ClipItem *>(m_dragItem); + updateClipTypeActions(dragGroup == NULL ? clip : NULL); m_changeSpeedAction->setEnabled(clip->clipType() == AV || clip->clipType() == VIDEO); m_pasteEffectsAction->setEnabled(m_copiedItems.count() == 1); } @@ -1026,11 +1030,13 @@ m_changeSpeedAction->setEnabled(false); m_pasteEffectsAction->setEnabled(m_copiedItems.count() == 1); m_ungroupAction->setEnabled(true); + updateClipTypeActions(NULL); m_timelineContextClipMenu->popup(pos); } else { m_ungroupAction->setEnabled(false); if (clip->type() == AVWIDGET) { ClipItem *item = static_cast <ClipItem*>(clip); + updateClipTypeActions(item); m_changeSpeedAction->setEnabled(item->clipType() == AV || item->clipType() == VIDEO); m_pasteEffectsAction->setEnabled(m_copiedItems.count() == 1); m_timelineContextClipMenu->popup(pos); @@ -1604,6 +1610,11 @@ for (int i = 0; i < items.count(); i++) { ClipItem *item = static_cast <ClipItem *>(items.at(i)); if (!hasVideoClip && (item->clipType() == AV || item->clipType() == VIDEO)) hasVideoClip = true; + if (items.count() == 1) { + updateClipTypeActions(item); + } else { + updateClipTypeActions(NULL); + } AddTimelineClipCommand *command = new AddTimelineClipCommand(this, item->xml(), item->clipProducer(), item->info(), item->effectList(), false, false); m_commandStack->push(command); item->baseClip()->addReference(); @@ -4302,7 +4313,7 @@ } } -void CustomTrackView::videoOnly() +void CustomTrackView::setVideoOnly() { resetSelectionGroup(); QList<QGraphicsItem *> selection = scene()->selectedItems(); @@ -4327,7 +4338,7 @@ m_commandStack->push(videoCommand); } -void CustomTrackView::audioOnly() +void CustomTrackView::setAudioOnly() { resetSelectionGroup(); QList<QGraphicsItem *> selection = scene()->selectedItems(); @@ -4352,6 +4363,31 @@ m_commandStack->push(videoCommand); } +void CustomTrackView::setAudioAndVideo() +{ + resetSelectionGroup(); + QList<QGraphicsItem *> selection = scene()->selectedItems(); + if (selection.isEmpty()) { + emit displayMessage(i18n("You must select one clip for this action"), ErrorMessage); + return; + } + QUndoCommand *videoCommand = new QUndoCommand(); + videoCommand->setText(i18n("Audio and Video")); + for (int i = 0; i < selection.count(); i++) { + if (selection.at(i)->type() == AVWIDGET) { + ClipItem *clip = static_cast <ClipItem *>(selection.at(i)); + if (clip->clipType() == AV || clip->clipType() == PLAYLIST) { + if (clip->parentItem()) { + emit displayMessage(i18n("Cannot change grouped clips"), ErrorMessage); + } else { + new ChangeClipTypeCommand(this, clip->track(), clip->startPos(), false, false, clip->isVideoOnly(), clip->isAudioOnly(), true, videoCommand); + } + } + } + } + m_commandStack->push(videoCommand); +} + void CustomTrackView::doChangeClipType(const GenTime &pos, int track, bool videoOnly, bool audioOnly) { ClipItem *clip = getClipItemAt(pos, track); @@ -4378,4 +4414,24 @@ clip->update(); } +void CustomTrackView::updateClipTypeActions(ClipItem *clip) +{ + if (clip == NULL || (clip->clipType() != AV && clip->clipType() != PLAYLIST)) { + m_clipTypeGroup->setEnabled(false); + } else { + m_clipTypeGroup->setEnabled(true); + QList <QAction *> actions = m_clipTypeGroup->actions(); + QString lookup; + if (clip->isAudioOnly()) lookup = "clip_audio_only"; + else if (clip->isVideoOnly()) lookup = "clip_video_only"; + else lookup = "clip_audio_and_video"; + for (int i = 0; i < actions.count(); i++) { + if (actions.at(i)->data().toString() == lookup) { + actions.at(i)->setChecked(true); + break; + } + } + } +} + #include "customtrackview.moc" Modified: trunk/kdenlive/src/customtrackview.h =================================================================== --- trunk/kdenlive/src/customtrackview.h 2009-04-04 20:48:12 UTC (rev 3212) +++ trunk/kdenlive/src/customtrackview.h 2009-04-04 21:53:26 UTC (rev 3213) @@ -80,7 +80,7 @@ int duration() const; void deleteSelectedClips(); void cutSelectedClips(); - void setContextMenu(QMenu *timeline, QMenu *clip, QMenu *transition); + void setContextMenu(QMenu *timeline, QMenu *clip, QMenu *transition, QActionGroup *clipTypeGroup); void checkTrackHeight(); //QList <TrackInfo> tracksList() const; void setTool(PROJECTTOOL tool); @@ -116,8 +116,9 @@ void loadGroups(const QDomNodeList groups); void splitAudio(); void doSplitAudio(const GenTime &pos, int track, bool split); - void videoOnly(); - void audioOnly(); + void setVideoOnly(); + void setAudioOnly(); + void setAudioAndVideo(); void doChangeClipType(const GenTime &pos, int track, bool videoOnly, bool audioOnly); public slots: @@ -211,6 +212,7 @@ QAction *m_changeSpeedAction; QAction *m_pasteEffectsAction; QAction *m_ungroupAction; + QActionGroup *m_clipTypeGroup; QTimer m_scrollTimer; int m_scrollOffset; bool m_clipDrag; @@ -242,8 +244,8 @@ void getClipAvailableSpace(AbstractClipItem *item, GenTime &minimum, GenTime &maximum); /** Get available space for transition move (min and max free positions) */ void getTransitionAvailableSpace(AbstractClipItem *item, GenTime &minimum, GenTime &maximum); + void updateClipTypeActions(ClipItem *clip); - private slots: void slotRefreshGuides(); void slotEnableRefresh(); Modified: trunk/kdenlive/src/dvdwizard.cpp =================================================================== --- trunk/kdenlive/src/dvdwizard.cpp 2009-04-04 20:48:12 UTC (rev 3212) +++ trunk/kdenlive/src/dvdwizard.cpp 2009-04-04 21:53:26 UTC (rev 3213) @@ -253,13 +253,9 @@ i++; } - kDebug() << "///// SPU: "; - kDebug() << doc.toString(); - QFile data(temp6.fileName()); if (data.open(QFile::WriteOnly)) { - QTextStream out(&data); - out << doc.toString(); + data.write(doc.toString().toUtf8()); } data.close(); @@ -397,8 +393,7 @@ */ QFile data2(m_authorFile.fileName()); if (data2.open(QFile::WriteOnly)) { - QTextStream out(&data2); - out << dvddoc.toString(); + data2.write(dvddoc.toString().toUtf8()); } data2.close(); /*kDebug() << "------------------"; Modified: trunk/kdenlive/src/kdenlivedoc.cpp =================================================================== --- trunk/kdenlive/src/kdenlivedoc.cpp 2009-04-04 20:48:12 UTC (rev 3212) +++ trunk/kdenlive/src/kdenlivedoc.cpp 2009-04-04 21:53:26 UTC (rev 3213) @@ -49,10 +49,19 @@ m_autoSaveTimer->setSingleShot(true); if (!url.isEmpty()) { QString tmpFile; - if (KIO::NetAccess::download(url.path(), tmpFile, parent)) { + bool success = KIO::NetAccess::download(url.path(), tmpFile, parent); + if (success) { QFile file(tmpFile); - m_document.setContent(&file, false); + QString errorMsg; + success = m_document.setContent(&file, false, &errorMsg); file.close(); + if (success == false) { + // File is corrupted, warn user + KMessageBox::error(parent, errorMsg); + } + } else KMessageBox::error(parent, KIO::NetAccess::lastErrorString()); + + if (success) { QDomNode infoXmlNode = m_document.elementsByTagName("kdenlivedoc").at(0); QDomNode westley = m_document.elementsByTagName("westley").at(0); if (!infoXmlNode.isNull()) { @@ -187,7 +196,6 @@ } KIO::NetAccess::removeTempFile(tmpFile); } else { - KMessageBox::error(parent, KIO::NetAccess::lastErrorString()); parent->slotGotProgressInfo(i18n("File %1 is not a Kdenlive project file."), 100); m_url = KUrl(); m_document = createEmptyDocument(KdenliveSettings::videotracks(), KdenliveSettings::audiotracks()); @@ -1014,8 +1022,7 @@ return false; } - QTextStream out(&file); - out << sceneList.toString(); + file.write(sceneList.toString().toUtf8()); if (file.error() != QFile::NoError) { KMessageBox::error(kapp->activeWindow(), i18n("Cannot write to file %1", path)); file.close(); Modified: trunk/kdenlive/src/kdenliveui.rc =================================================================== --- trunk/kdenlive/src/kdenliveui.rc 2009-04-04 20:48:12 UTC (rev 3212) +++ trunk/kdenlive/src/kdenliveui.rc 2009-04-04 21:53:26 UTC (rev 3213) @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE kpartgui SYSTEM "kpartgui.dtd"> -<gui name="kdenlive" version="40"> +<gui name="kdenlive" version="42"> <ToolBar name="extraToolBar" > <text>Extra Toolbar</text> <Action name="project_render" /> @@ -55,8 +55,10 @@ </Menu> <Action name="auto_transition" /> <Action name="split_audio" /> + <Separator /> <Action name="clip_audio_only" /> <Action name="clip_video_only" /> + <Action name="clip_audio_and_video" /> </Menu> <Menu name="timeline" ><text>Timeline</text> Modified: trunk/kdenlive/src/mainwindow.cpp =================================================================== --- trunk/kdenlive/src/mainwindow.cpp 2009-04-04 20:48:12 UTC (rev 3212) +++ trunk/kdenlive/src/mainwindow.cpp 2009-04-04 21:53:26 UTC (rev 3213) @@ -964,12 +964,26 @@ KAction* audioOnly = new KAction(KIcon("document-new"), i18n("Audio Only"), this); collection->addAction("clip_audio_only", audioOnly); - connect(audioOnly, SIGNAL(triggered(bool)), this, SLOT(slotAudioOnly())); + audioOnly->setData("clip_audio_only"); + audioOnly->setCheckable(true); KAction* videoOnly = new KAction(KIcon("document-new"), i18n("Video Only"), this); collection->addAction("clip_video_only", videoOnly); - connect(videoOnly, SIGNAL(triggered(bool)), this, SLOT(slotVideoOnly())); + videoOnly->setData("clip_video_only"); + videoOnly->setCheckable(true); + KAction* audioAndVideo = new KAction(KIcon("document-new"), i18n("Audio and Video"), this); + collection->addAction("clip_audio_and_video", audioAndVideo); + audioAndVideo->setData("clip_audio_and_video"); + audioAndVideo->setCheckable(true); + + m_clipTypeGroup = new QActionGroup(this); + m_clipTypeGroup->addAction(audioOnly); + m_clipTypeGroup->addAction(videoOnly); + m_clipTypeGroup->addAction(audioAndVideo); + connect(m_clipTypeGroup, SIGNAL(triggered(QAction *)), this, SLOT(slotUpdateClipType(QAction *))); + m_clipTypeGroup->setEnabled(false); + KAction *insertSpace = new KAction(KIcon(), i18n("Insert Space"), this); collection->addAction("insert_space", insertSpace); connect(insertSpace, SIGNAL(triggered()), this, SLOT(slotInsertSpace())); @@ -1786,7 +1800,7 @@ connect(trackView, SIGNAL(zoneMoved(int, int)), this, SLOT(slotZoneMoved(int, int))); connect(m_projectList, SIGNAL(loadingIsOver()), trackView->projectView(), SLOT(slotUpdateAllThumbs())); - trackView->projectView()->setContextMenu(m_timelineContextMenu, m_timelineContextClipMenu, m_timelineContextTransitionMenu); + trackView->projectView()->setContextMenu(m_timelineContextMenu, m_timelineContextClipMenu, m_timelineContextTransitionMenu, m_clipTypeGroup); m_activeTimeline = trackView; if (m_renderWidget) { m_renderWidget->setProfile(doc->mltProfile()); @@ -2534,16 +2548,15 @@ if (m_activeTimeline) m_activeTimeline->projectView()->splitAudio(); } -void MainWindow::slotAudioOnly() +void MainWindow::slotUpdateClipType(QAction *action) { - if (m_activeTimeline) m_activeTimeline->projectView()->audioOnly(); + if (m_activeTimeline) { + if (action->data().toString() == "clip_audio_only") m_activeTimeline->projectView()->setAudioOnly(); + else if (action->data().toString() == "clip_video_only") m_activeTimeline->projectView()->setVideoOnly(); + else m_activeTimeline->projectView()->setAudioAndVideo(); + } } -void MainWindow::slotVideoOnly() -{ - if (m_activeTimeline) m_activeTimeline->projectView()->videoOnly(); -} - void MainWindow::slotDvdWizard(const QString &url, const QString &profile) { DvdWizard *w = new DvdWizard(url, profile, this); Modified: trunk/kdenlive/src/mainwindow.h =================================================================== --- trunk/kdenlive/src/mainwindow.h 2009-04-04 20:48:12 UTC (rev 3212) +++ trunk/kdenlive/src/mainwindow.h 2009-04-04 21:53:26 UTC (rev 3213) @@ -171,6 +171,7 @@ QAction *m_loopZone; QAction *m_playZone; StatusBarMessageLabel *m_messageLabel; + QActionGroup *m_clipTypeGroup; bool m_findActivated; QString m_findString; @@ -297,8 +298,7 @@ void slotGroupClips(); void slotUnGroupClips(); void slotSplitAudio(); - void slotVideoOnly(); - void slotAudioOnly(); + void slotUpdateClipType(QAction *action); void slotShowTimeline(bool show); void slotMaximizeCurrent(bool show); Modified: trunk/kdenlive/src/monitor.cpp =================================================================== --- trunk/kdenlive/src/monitor.cpp 2009-04-04 20:48:12 UTC (rev 3212) +++ trunk/kdenlive/src/monitor.cpp 2009-04-04 21:53:26 UTC (rev 3213) @@ -150,7 +150,7 @@ { m_contextMenu = new QMenu(this); m_contextMenu->addMenu(m_playMenu); - m_contextMenu->addMenu(goMenu); + if (goMenu) m_contextMenu->addMenu(goMenu); if (markerMenu) m_contextMenu->addMenu(markerMenu); m_playMenu->addAction(playZone); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ra...@us...> - 2009-04-05 01:27:15
|
Revision: 3214 http://kdenlive.svn.sourceforge.net/kdenlive/?rev=3214&view=rev Author: rayll Date: 2009-04-05 01:27:04 +0000 (Sun, 05 Apr 2009) Log Message: ----------- Add some brackets to make &&/|| precedence explicit Signed-off-by: Ray Lehtiniemi <ra...@ma...> Modified Paths: -------------- trunk/kdenlive/src/clipitem.cpp trunk/kdenlive/src/customtrackview.cpp Modified: trunk/kdenlive/src/clipitem.cpp =================================================================== --- trunk/kdenlive/src/clipitem.cpp 2009-04-04 21:53:26 UTC (rev 3213) +++ trunk/kdenlive/src/clipitem.cpp 2009-04-05 01:27:04 UTC (rev 3214) @@ -757,7 +757,7 @@ // draw frame around clip QColor frameColor(Qt::black); int alphaBase = 60; - if (isSelected() || parentItem() && parentItem()->isSelected()) { + if (isSelected() || (parentItem() && parentItem()->isSelected())) { frameColor = QColor(Qt::red); alphaBase = 90; } Modified: trunk/kdenlive/src/customtrackview.cpp =================================================================== --- trunk/kdenlive/src/customtrackview.cpp 2009-04-04 21:53:26 UTC (rev 3213) +++ trunk/kdenlive/src/customtrackview.cpp 2009-04-05 01:27:04 UTC (rev 3214) @@ -728,7 +728,7 @@ if (m_dragItem->type() == AVWIDGET && !m_dragItem->isItemLocked()) emit clipItemSelected((ClipItem*) m_dragItem); else emit clipItemSelected(NULL); - if (event->modifiers() != Qt::ControlModifier && (m_dragItem->isSelected() || dragGroup && dragGroup->isSelected())) { + if (event->modifiers() != Qt::ControlModifier && (m_dragItem->isSelected() || (dragGroup && dragGroup->isSelected()))) { // If clicked item is selected, allow move if (dragGroup) dragGroup->setSelected(true); //event->accept(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ra...@us...> - 2009-04-05 01:28:23
|
Revision: 3215 http://kdenlive.svn.sourceforge.net/kdenlive/?rev=3215&view=rev Author: rayll Date: 2009-04-05 01:28:13 +0000 (Sun, 05 Apr 2009) Log Message: ----------- Disable constructor for initEffects class This class consists solely of static methods, so disable the constructor. There is also no need for this class to derive from QObject. Signed-off-by: Ray Lehtiniemi <ra...@ma...> Modified Paths: -------------- trunk/kdenlive/src/initeffects.cpp trunk/kdenlive/src/initeffects.h Modified: trunk/kdenlive/src/initeffects.cpp =================================================================== --- trunk/kdenlive/src/initeffects.cpp 2009-04-05 01:27:04 UTC (rev 3214) +++ trunk/kdenlive/src/initeffects.cpp 2009-04-05 01:28:13 UTC (rev 3215) @@ -61,16 +61,6 @@ initEffectsThumbnailer initEffects::thumbnailer; -initEffects::initEffects() -{ - -} - -initEffects::~initEffects() -{ -} - - // static void initEffects::refreshLumas() { Modified: trunk/kdenlive/src/initeffects.h =================================================================== --- trunk/kdenlive/src/initeffects.h 2009-04-05 01:27:04 UTC (rev 3214) +++ trunk/kdenlive/src/initeffects.h 2009-04-05 01:28:13 UTC (rev 3215) @@ -42,13 +42,9 @@ }; -class initEffects : public QObject +class initEffects { - Q_OBJECT public: - initEffects(); - ~initEffects(); - static Mlt::Repository *parseEffectFiles(); static void refreshLumas(); static QDomDocument createDescriptionFromMlt(Mlt::Repository* repository, const QString& type, const QString& name); @@ -69,7 +65,9 @@ static const char* ladspaPitchShifterEffectString(QStringList params); static const char* ladspaPhaserEffectString(QStringList params); static const char* ladspaRateScalerEffectString(QStringList params); + private: + initEffects(); // disable the constructor static initEffectsThumbnailer thumbnailer; }; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ra...@us...> - 2009-04-05 02:11:40
|
Revision: 3217 http://kdenlive.svn.sourceforge.net/kdenlive/?rev=3217&view=rev Author: rayll Date: 2009-04-05 02:11:34 +0000 (Sun, 05 Apr 2009) Log Message: ----------- Remove m_doIt from several QUndoCommand subclasses. Some command objects do not actually make use of the m_doIt member variable. Remove the member variable from these classes and update the constructors and all callers. Signed-off-by: Ray Lehtiniemi <ra...@ma...> Modified Paths: -------------- trunk/kdenlive/src/addmarkercommand.cpp trunk/kdenlive/src/addmarkercommand.h trunk/kdenlive/src/addtrackcommand.cpp trunk/kdenlive/src/addtrackcommand.h trunk/kdenlive/src/changecliptypecommand.cpp trunk/kdenlive/src/changecliptypecommand.h trunk/kdenlive/src/changespeedcommand.cpp trunk/kdenlive/src/changespeedcommand.h trunk/kdenlive/src/changetrackcommand.cpp trunk/kdenlive/src/changetrackcommand.h trunk/kdenlive/src/customtrackview.cpp trunk/kdenlive/src/groupclipscommand.cpp trunk/kdenlive/src/groupclipscommand.h trunk/kdenlive/src/locktrackcommand.cpp trunk/kdenlive/src/locktrackcommand.h trunk/kdenlive/src/moveeffectcommand.cpp trunk/kdenlive/src/moveeffectcommand.h trunk/kdenlive/src/razorclipcommand.cpp trunk/kdenlive/src/razorclipcommand.h trunk/kdenlive/src/splitaudiocommand.cpp trunk/kdenlive/src/splitaudiocommand.h Modified: trunk/kdenlive/src/addmarkercommand.cpp =================================================================== --- trunk/kdenlive/src/addmarkercommand.cpp 2009-04-05 01:29:01 UTC (rev 3216) +++ trunk/kdenlive/src/addmarkercommand.cpp 2009-04-05 02:11:34 UTC (rev 3217) @@ -21,7 +21,7 @@ #include <KLocale> -AddMarkerCommand::AddMarkerCommand(CustomTrackView *view, const QString &oldcomment, const QString &comment, const QString &id, const GenTime &pos, bool doIt, QUndoCommand * parent) : QUndoCommand(parent), m_view(view), m_oldcomment(oldcomment), m_comment(comment), m_id(id), m_pos(pos), m_doIt(doIt) +AddMarkerCommand::AddMarkerCommand(CustomTrackView *view, const QString &oldcomment, const QString &comment, const QString &id, const GenTime &pos, QUndoCommand * parent) : QUndoCommand(parent), m_view(view), m_oldcomment(oldcomment), m_comment(comment), m_id(id), m_pos(pos) { if (m_comment.isEmpty()) setText(i18n("Delete marker")); else if (m_oldcomment.isEmpty()) setText(i18n("Add marker")); @@ -37,9 +37,6 @@ // virtual void AddMarkerCommand::redo() { - if (m_doIt) { m_view->addMarker(m_id, m_pos, m_comment); - } - m_doIt = true; } Modified: trunk/kdenlive/src/addmarkercommand.h =================================================================== --- trunk/kdenlive/src/addmarkercommand.h 2009-04-05 01:29:01 UTC (rev 3216) +++ trunk/kdenlive/src/addmarkercommand.h 2009-04-05 02:11:34 UTC (rev 3217) @@ -32,7 +32,7 @@ class AddMarkerCommand : public QUndoCommand { public: - AddMarkerCommand(CustomTrackView *view, const QString &oldcomment, const QString &comment, const QString &id, const GenTime &pos, bool doIt, QUndoCommand * parent = 0); + AddMarkerCommand(CustomTrackView *view, const QString &oldcomment, const QString &comment, const QString &id, const GenTime &pos, QUndoCommand * parent = 0); virtual void undo(); virtual void redo(); @@ -42,7 +42,6 @@ QString m_comment; QString m_id; GenTime m_pos; - bool m_doIt; }; #endif Modified: trunk/kdenlive/src/addtrackcommand.cpp =================================================================== --- trunk/kdenlive/src/addtrackcommand.cpp 2009-04-05 01:29:01 UTC (rev 3216) +++ trunk/kdenlive/src/addtrackcommand.cpp 2009-04-05 02:11:34 UTC (rev 3217) @@ -23,7 +23,7 @@ #include <KLocale> -AddTrackCommand::AddTrackCommand(CustomTrackView *view, int ix, TrackInfo info, bool addTrack, bool doIt, QUndoCommand * parent) : QUndoCommand(parent), m_view(view), m_ix(ix), m_info(info), m_addTrack(addTrack), m_doIt(doIt) +AddTrackCommand::AddTrackCommand(CustomTrackView *view, int ix, TrackInfo info, bool addTrack, QUndoCommand * parent) : QUndoCommand(parent), m_view(view), m_ix(ix), m_info(info), m_addTrack(addTrack) { if (addTrack) setText(i18n("Add track")); else setText(i18n("Delete track")); @@ -34,7 +34,6 @@ void AddTrackCommand::undo() { // kDebug()<<"---- undoing action"; - m_doIt = true; if (m_addTrack) m_view->removeTrack(m_ix); else m_view->addTrack(m_info, m_ix); } @@ -42,10 +41,7 @@ void AddTrackCommand::redo() { kDebug() << "---- redoing action"; - if (m_doIt) { if (m_addTrack) m_view->addTrack(m_info, m_ix); else m_view->removeTrack(m_ix); - } - m_doIt = true; } Modified: trunk/kdenlive/src/addtrackcommand.h =================================================================== --- trunk/kdenlive/src/addtrackcommand.h 2009-04-05 01:29:01 UTC (rev 3216) +++ trunk/kdenlive/src/addtrackcommand.h 2009-04-05 02:11:34 UTC (rev 3217) @@ -33,14 +33,13 @@ class AddTrackCommand : public QUndoCommand { public: - AddTrackCommand(CustomTrackView *view, int ix, TrackInfo info, bool addTrack, bool doIt, QUndoCommand * parent = 0); + AddTrackCommand(CustomTrackView *view, int ix, TrackInfo info, bool addTrack, QUndoCommand * parent = 0); virtual void undo(); virtual void redo(); private: CustomTrackView *m_view; int m_ix; - bool m_doIt; bool m_addTrack; TrackInfo m_info; }; Modified: trunk/kdenlive/src/changecliptypecommand.cpp =================================================================== --- trunk/kdenlive/src/changecliptypecommand.cpp 2009-04-05 01:29:01 UTC (rev 3216) +++ trunk/kdenlive/src/changecliptypecommand.cpp 2009-04-05 02:11:34 UTC (rev 3217) @@ -23,7 +23,7 @@ #include <KLocale> -ChangeClipTypeCommand::ChangeClipTypeCommand(CustomTrackView *view, const int track, const GenTime &pos, bool videoOnly, bool audioOnly, bool originalVideo, bool originalAudio, bool doIt, QUndoCommand * parent) : QUndoCommand(parent), m_view(view), m_track(track), m_pos(pos), m_videoOnly(videoOnly), m_audioOnly(audioOnly), m_originalVideoOnly(originalVideo), m_originalAudioOnly(originalAudio), m_doIt(doIt) +ChangeClipTypeCommand::ChangeClipTypeCommand(CustomTrackView *view, const int track, const GenTime &pos, bool videoOnly, bool audioOnly, bool originalVideo, bool originalAudio, QUndoCommand * parent) : QUndoCommand(parent), m_view(view), m_track(track), m_pos(pos), m_videoOnly(videoOnly), m_audioOnly(audioOnly), m_originalVideoOnly(originalVideo), m_originalAudioOnly(originalAudio) { setText(i18n("Change clip type")); } @@ -32,15 +32,12 @@ void ChangeClipTypeCommand::undo() { // kDebug()<<"---- undoing action"; - m_doIt = true; m_view->doChangeClipType(m_pos, m_track, m_originalVideoOnly, m_originalAudioOnly); } // virtual void ChangeClipTypeCommand::redo() { kDebug() << "---- redoing action"; - if (m_doIt) m_view->doChangeClipType(m_pos, m_track, m_videoOnly, m_audioOnly); - m_doIt = true; } Modified: trunk/kdenlive/src/changecliptypecommand.h =================================================================== --- trunk/kdenlive/src/changecliptypecommand.h 2009-04-05 01:29:01 UTC (rev 3216) +++ trunk/kdenlive/src/changecliptypecommand.h 2009-04-05 02:11:34 UTC (rev 3217) @@ -34,7 +34,7 @@ class ChangeClipTypeCommand : public QUndoCommand { public: - ChangeClipTypeCommand(CustomTrackView *view, const int track, const GenTime &pos, bool videoOnly, bool audioOnly, bool originalVideo, bool originalAudio, bool doIt, QUndoCommand * parent = 0); + ChangeClipTypeCommand(CustomTrackView *view, const int track, const GenTime &pos, bool videoOnly, bool audioOnly, bool originalVideo, bool originalAudio, QUndoCommand * parent = 0); virtual void undo(); virtual void redo(); @@ -46,7 +46,6 @@ bool m_audioOnly; bool m_originalVideoOnly; bool m_originalAudioOnly; - bool m_doIt; }; #endif Modified: trunk/kdenlive/src/changespeedcommand.cpp =================================================================== --- trunk/kdenlive/src/changespeedcommand.cpp 2009-04-05 01:29:01 UTC (rev 3216) +++ trunk/kdenlive/src/changespeedcommand.cpp 2009-04-05 02:11:34 UTC (rev 3217) @@ -23,7 +23,7 @@ #include <KLocale> -ChangeSpeedCommand::ChangeSpeedCommand(CustomTrackView *view, ItemInfo info, double old_speed, double new_speed, const QString &clipId, bool doIt, QUndoCommand * parent) : QUndoCommand(parent), m_view(view), m_clipInfo(info), m_old_speed(old_speed), m_new_speed(new_speed), m_clipId(clipId), m_doIt(doIt) +ChangeSpeedCommand::ChangeSpeedCommand(CustomTrackView *view, ItemInfo info, double old_speed, double new_speed, const QString &clipId, QUndoCommand * parent) : QUndoCommand(parent), m_view(view), m_clipInfo(info), m_old_speed(old_speed), m_new_speed(new_speed), m_clipId(clipId) { setText(i18n("Adjust clip length")); } @@ -37,10 +37,7 @@ // virtual void ChangeSpeedCommand::redo() { - if (m_doIt) { m_view->doChangeClipSpeed(m_clipInfo, m_new_speed, m_old_speed, m_clipId); - } - m_doIt = true; } Modified: trunk/kdenlive/src/changespeedcommand.h =================================================================== --- trunk/kdenlive/src/changespeedcommand.h 2009-04-05 01:29:01 UTC (rev 3216) +++ trunk/kdenlive/src/changespeedcommand.h 2009-04-05 02:11:34 UTC (rev 3217) @@ -33,7 +33,7 @@ class ChangeSpeedCommand : public QUndoCommand { public: - ChangeSpeedCommand(CustomTrackView *view, ItemInfo info, double old_speed, double new_speed, const QString &clipId, bool doIt, QUndoCommand * parent = 0); + ChangeSpeedCommand(CustomTrackView *view, ItemInfo info, double old_speed, double new_speed, const QString &clipId, QUndoCommand * parent = 0); virtual void undo(); virtual void redo(); @@ -41,7 +41,6 @@ CustomTrackView *m_view; ItemInfo m_clipInfo; QString m_clipId; - bool m_doIt; double m_old_speed; double m_new_speed; }; Modified: trunk/kdenlive/src/changetrackcommand.cpp =================================================================== --- trunk/kdenlive/src/changetrackcommand.cpp 2009-04-05 01:29:01 UTC (rev 3216) +++ trunk/kdenlive/src/changetrackcommand.cpp 2009-04-05 02:11:34 UTC (rev 3217) @@ -23,7 +23,7 @@ #include <KLocale> -ChangeTrackCommand::ChangeTrackCommand(CustomTrackView *view, int ix, TrackInfo oldInfo, TrackInfo newInfo, bool doIt, QUndoCommand * parent) : QUndoCommand(parent), m_view(view), m_ix(ix), m_oldinfo(oldInfo), m_newinfo(newInfo), m_doIt(doIt) +ChangeTrackCommand::ChangeTrackCommand(CustomTrackView *view, int ix, TrackInfo oldInfo, TrackInfo newInfo, QUndoCommand * parent) : QUndoCommand(parent), m_view(view), m_ix(ix), m_oldinfo(oldInfo), m_newinfo(newInfo) { setText(i18n("Change track type")); } @@ -33,13 +33,11 @@ void ChangeTrackCommand::undo() { // kDebug()<<"---- undoing action"; - m_doIt = true; m_view->changeTrack(m_ix, m_oldinfo); } // virtual void ChangeTrackCommand::redo() { - if (m_doIt) m_view->changeTrack(m_ix, m_newinfo); - m_doIt = true; + m_view->changeTrack(m_ix, m_newinfo); } Modified: trunk/kdenlive/src/changetrackcommand.h =================================================================== --- trunk/kdenlive/src/changetrackcommand.h 2009-04-05 01:29:01 UTC (rev 3216) +++ trunk/kdenlive/src/changetrackcommand.h 2009-04-05 02:11:34 UTC (rev 3217) @@ -33,14 +33,13 @@ class ChangeTrackCommand : public QUndoCommand { public: - ChangeTrackCommand(CustomTrackView *view, int ix, TrackInfo oldInfo, TrackInfo newInfo, bool doIt, QUndoCommand * parent = 0); + ChangeTrackCommand(CustomTrackView *view, int ix, TrackInfo oldInfo, TrackInfo newInfo, QUndoCommand * parent = 0); virtual void undo(); virtual void redo(); private: CustomTrackView *m_view; int m_ix; - bool m_doIt; TrackInfo m_oldinfo; TrackInfo m_newinfo; }; Modified: trunk/kdenlive/src/customtrackview.cpp =================================================================== --- trunk/kdenlive/src/customtrackview.cpp 2009-04-05 01:29:01 UTC (rev 3216) +++ trunk/kdenlive/src/customtrackview.cpp 2009-04-05 02:11:34 UTC (rev 3217) @@ -691,7 +691,7 @@ return; } AbstractClipItem *clip = static_cast <AbstractClipItem *>(m_dragItem); - RazorClipCommand* command = new RazorClipCommand(this, clip->info(), GenTime((int)(mapToScene(event->pos()).x()), m_document->fps()), true); + RazorClipCommand* command = new RazorClipCommand(this, clip->info(), GenTime((int)(mapToScene(event->pos()).x()), m_document->fps())); m_document->renderer()->pause(); m_commandStack->push(command); m_document->setModified(true); @@ -1337,7 +1337,7 @@ void CustomTrackView::slotChangeEffectPosition(ClipItem *clip, int currentPos, int newPos) { - MoveEffectCommand *command = new MoveEffectCommand(this, m_document->tracksCount() - clip->track(), clip->startPos(), currentPos, newPos, true); + MoveEffectCommand *command = new MoveEffectCommand(this, m_document->tracksCount() - clip->track(), clip->startPos(), currentPos, newPos); m_commandStack->push(command); m_document->setModified(true); } @@ -1832,7 +1832,7 @@ void CustomTrackView::slotSwitchTrackLock(int ix) { int tracknumber = m_document->tracksCount() - ix - 1; - LockTrackCommand *command = new LockTrackCommand(this, ix, !m_document->trackInfoAt(tracknumber).isLocked, true); + LockTrackCommand *command = new LockTrackCommand(this, ix, !m_document->trackInfoAt(tracknumber).isLocked); m_commandStack->push(command); } @@ -2033,7 +2033,7 @@ count++; if (item->parentItem()) { // Clip is in a group, destroy the group - new GroupClipsCommand(this, QList<ItemInfo>() << item->info(), QList<ItemInfo>(), false, true, deleteCommand); + new GroupClipsCommand(this, QList<ItemInfo>() << item->info(), QList<ItemInfo>(), false, deleteCommand); } new AddTimelineClipCommand(this, item->xml(), item->clipProducer(), item->info(), item->effectList(), true, true, deleteCommand); } @@ -2648,7 +2648,7 @@ } } if (clipInfos.count() > 0) { - new GroupClipsCommand(this, clipInfos, transitionInfos, false, true, deleteSelected); + new GroupClipsCommand(this, clipInfos, transitionInfos, false, deleteSelected); } } } @@ -2693,7 +2693,7 @@ double speed = (double) percent / 100.0; if (item->speed() != speed && (item->clipType() == VIDEO || item->clipType() == AV)) { count++; - new ChangeSpeedCommand(this, info, item->speed(), speed, item->clipProducer(), true, changeSelected); + new ChangeSpeedCommand(this, info, item->speed(), speed, item->clipProducer(), changeSelected); } } } @@ -2731,7 +2731,7 @@ if (item->parentItem() && item->parentItem() != m_selectionGroup) { emit displayMessage(i18n("Cannot cut a clip in a group"), ErrorMessage); } else if (currentPos > item->startPos() && currentPos < item->endPos()) { - RazorClipCommand *command = new RazorClipCommand(this, item->info(), currentPos, true); + RazorClipCommand *command = new RazorClipCommand(this, item->info(), currentPos); m_commandStack->push(command); } } @@ -2763,7 +2763,7 @@ } } if (clipInfos.count() > 0) { - GroupClipsCommand *command = new GroupClipsCommand(this, clipInfos, transitionInfos, group, true); + GroupClipsCommand *command = new GroupClipsCommand(this, clipInfos, transitionInfos, group); m_commandStack->push(command); } } @@ -3398,13 +3398,13 @@ void CustomTrackView::slotAddClipMarker(const QString &id, GenTime t, QString c) { QString oldcomment = m_document->clipManager()->getClipById(id)->markerComment(t); - AddMarkerCommand *command = new AddMarkerCommand(this, oldcomment, c, id, t, true); + AddMarkerCommand *command = new AddMarkerCommand(this, oldcomment, c, id, t); m_commandStack->push(command); } void CustomTrackView::slotDeleteClipMarker(const QString &comment, const QString &id, const GenTime &position) { - AddMarkerCommand *command = new AddMarkerCommand(this, comment, QString(), id, position, true); + AddMarkerCommand *command = new AddMarkerCommand(this, comment, QString(), id, position); m_commandStack->push(command); } @@ -3421,7 +3421,7 @@ deleteMarkers->setText("Delete clip markers"); for (int i = 0; i < markers.size(); i++) { - new AddMarkerCommand(this, markers.at(i).comment(), QString(), id, markers.at(i).time(), true, deleteMarkers); + new AddMarkerCommand(this, markers.at(i).comment(), QString(), id, markers.at(i).time(), deleteMarkers); } m_commandStack->push(deleteMarkers); } @@ -4032,7 +4032,7 @@ info.isBlind = true; info.isLocked = false; } - AddTrackCommand *addTrack = new AddTrackCommand(this, ix, info, true, true); + AddTrackCommand *addTrack = new AddTrackCommand(this, ix, info, true); m_commandStack->push(addTrack); m_document->setModified(true); } @@ -4046,7 +4046,7 @@ TrackInfo info = m_document->trackInfoAt(m_document->tracksCount() - ix - 1); deleteTimelineTrack(ix, info); m_document->setModified(true); - /*AddTrackCommand* command = new AddTrackCommand(this, ix, info, false, true); + /*AddTrackCommand* command = new AddTrackCommand(this, ix, info, false); m_commandStack->push(command);*/ } } @@ -4106,14 +4106,14 @@ } } - new AddTrackCommand(this, ix, trackinfo, false, true, deleteTrack); + new AddTrackCommand(this, ix, trackinfo, false, deleteTrack); m_commandStack->push(deleteTrack); } void CustomTrackView::changeTimelineTrack(int ix, TrackInfo trackinfo) { TrackInfo oldinfo = m_document->trackInfoAt(m_document->tracksCount() - ix - 1); - ChangeTrackCommand *changeTrack = new ChangeTrackCommand(this, ix, oldinfo, trackinfo, true); + ChangeTrackCommand *changeTrack = new ChangeTrackCommand(this, ix, oldinfo, trackinfo); m_commandStack->push(changeTrack); } @@ -4236,7 +4236,7 @@ if (clip->parentItem()) { emit displayMessage(i18n("Cannot split audio of grouped clips"), ErrorMessage); } else { - new SplitAudioCommand(this, clip->track(), clip->startPos(), true, splitCommand); + new SplitAudioCommand(this, clip->track(), clip->startPos(), splitCommand); } } } @@ -4330,7 +4330,7 @@ if (clip->parentItem()) { emit displayMessage(i18n("Cannot change grouped clips"), ErrorMessage); } else { - new ChangeClipTypeCommand(this, clip->track(), clip->startPos(), true, false, clip->isVideoOnly(), clip->isAudioOnly(), true, videoCommand); + new ChangeClipTypeCommand(this, clip->track(), clip->startPos(), true, false, clip->isVideoOnly(), clip->isAudioOnly(), videoCommand); } } } @@ -4355,7 +4355,7 @@ if (clip->parentItem()) { emit displayMessage(i18n("Cannot change grouped clips"), ErrorMessage); } else { - new ChangeClipTypeCommand(this, clip->track(), clip->startPos(), false, true, clip->isVideoOnly(), clip->isAudioOnly(), true, videoCommand); + new ChangeClipTypeCommand(this, clip->track(), clip->startPos(), false, true, clip->isVideoOnly(), clip->isAudioOnly(), videoCommand); } } } @@ -4380,7 +4380,7 @@ if (clip->parentItem()) { emit displayMessage(i18n("Cannot change grouped clips"), ErrorMessage); } else { - new ChangeClipTypeCommand(this, clip->track(), clip->startPos(), false, false, clip->isVideoOnly(), clip->isAudioOnly(), true, videoCommand); + new ChangeClipTypeCommand(this, clip->track(), clip->startPos(), false, false, clip->isVideoOnly(), clip->isAudioOnly(), videoCommand); } } } Modified: trunk/kdenlive/src/groupclipscommand.cpp =================================================================== --- trunk/kdenlive/src/groupclipscommand.cpp 2009-04-05 01:29:01 UTC (rev 3216) +++ trunk/kdenlive/src/groupclipscommand.cpp 2009-04-05 02:11:34 UTC (rev 3217) @@ -23,7 +23,7 @@ #include <KLocale> -GroupClipsCommand::GroupClipsCommand(CustomTrackView *view, const QList <ItemInfo> clipInfos, const QList <ItemInfo> transitionInfos, bool group, bool doIt, QUndoCommand * parent) : QUndoCommand(parent), m_view(view), m_clips(clipInfos), m_transitions(transitionInfos), m_group(group), m_doIt(doIt) +GroupClipsCommand::GroupClipsCommand(CustomTrackView *view, const QList <ItemInfo> clipInfos, const QList <ItemInfo> transitionInfos, bool group, QUndoCommand * parent) : QUndoCommand(parent), m_view(view), m_clips(clipInfos), m_transitions(transitionInfos), m_group(group) { if (m_group) setText(i18n("Group clips")); else setText(i18n("Ungroup clips")); @@ -34,15 +34,12 @@ void GroupClipsCommand::undo() { // kDebug()<<"---- undoing action"; - m_doIt = true; m_view->doGroupClips(m_clips, m_transitions, !m_group); } // virtual void GroupClipsCommand::redo() { kDebug() << "---- redoing action"; - if (m_doIt) m_view->doGroupClips(m_clips, m_transitions, m_group); - m_doIt = true; } Modified: trunk/kdenlive/src/groupclipscommand.h =================================================================== --- trunk/kdenlive/src/groupclipscommand.h 2009-04-05 01:29:01 UTC (rev 3216) +++ trunk/kdenlive/src/groupclipscommand.h 2009-04-05 02:11:34 UTC (rev 3217) @@ -34,7 +34,7 @@ class GroupClipsCommand : public QUndoCommand { public: - GroupClipsCommand(CustomTrackView *view, const QList <ItemInfo> clipInfos, const QList <ItemInfo> transitionInfos, bool group, bool doIt, QUndoCommand * parent = 0); + GroupClipsCommand(CustomTrackView *view, const QList <ItemInfo> clipInfos, const QList <ItemInfo> transitionInfos, bool group, QUndoCommand * parent = 0); virtual void undo(); virtual void redo(); @@ -42,7 +42,6 @@ CustomTrackView *m_view; const QList <ItemInfo> m_clips; const QList <ItemInfo> m_transitions; - bool m_doIt; bool m_group; }; Modified: trunk/kdenlive/src/locktrackcommand.cpp =================================================================== --- trunk/kdenlive/src/locktrackcommand.cpp 2009-04-05 01:29:01 UTC (rev 3216) +++ trunk/kdenlive/src/locktrackcommand.cpp 2009-04-05 02:11:34 UTC (rev 3217) @@ -22,7 +22,7 @@ #include <KLocale> -LockTrackCommand::LockTrackCommand(CustomTrackView *view, int ix, bool lock, bool doIt, QUndoCommand * parent) : QUndoCommand(parent), m_view(view), m_ix(ix), m_lock(lock), m_doIt(doIt) +LockTrackCommand::LockTrackCommand(CustomTrackView *view, int ix, bool lock, QUndoCommand * parent) : QUndoCommand(parent), m_view(view), m_ix(ix), m_lock(lock) { if (lock) setText(i18n("Lock track")); else setText(i18n("Unlock track")); @@ -37,10 +37,7 @@ // virtual void LockTrackCommand::redo() { - if (m_doIt) { m_view->lockTrack(m_ix, m_lock); - } - m_doIt = true; } Modified: trunk/kdenlive/src/locktrackcommand.h =================================================================== --- trunk/kdenlive/src/locktrackcommand.h 2009-04-05 01:29:01 UTC (rev 3216) +++ trunk/kdenlive/src/locktrackcommand.h 2009-04-05 02:11:34 UTC (rev 3217) @@ -29,14 +29,13 @@ class LockTrackCommand : public QUndoCommand { public: - LockTrackCommand(CustomTrackView *view, int ix, bool lock, bool doIt, QUndoCommand * parent = 0); + LockTrackCommand(CustomTrackView *view, int ix, bool lock, QUndoCommand * parent = 0); virtual void undo(); virtual void redo(); private: CustomTrackView *m_view; int m_ix; - bool m_doIt; bool m_lock; }; Modified: trunk/kdenlive/src/moveeffectcommand.cpp =================================================================== --- trunk/kdenlive/src/moveeffectcommand.cpp 2009-04-05 01:29:01 UTC (rev 3216) +++ trunk/kdenlive/src/moveeffectcommand.cpp 2009-04-05 02:11:34 UTC (rev 3217) @@ -23,7 +23,7 @@ #include <KLocale> -MoveEffectCommand::MoveEffectCommand(CustomTrackView *view, const int track, GenTime pos, int oldPos, int newPos, bool doIt, QUndoCommand * parent) : QUndoCommand(parent), m_view(view), m_track(track), m_pos(pos), m_oldindex(oldPos), m_newindex(newPos), m_doIt(doIt) +MoveEffectCommand::MoveEffectCommand(CustomTrackView *view, const int track, GenTime pos, int oldPos, int newPos, QUndoCommand * parent) : QUndoCommand(parent), m_view(view), m_track(track), m_pos(pos), m_oldindex(oldPos), m_newindex(newPos) { /* QString effectName; QDomNode namenode = effect.elementsByTagName("name").item(0); Modified: trunk/kdenlive/src/moveeffectcommand.h =================================================================== --- trunk/kdenlive/src/moveeffectcommand.h 2009-04-05 01:29:01 UTC (rev 3216) +++ trunk/kdenlive/src/moveeffectcommand.h 2009-04-05 02:11:34 UTC (rev 3217) @@ -31,7 +31,7 @@ class MoveEffectCommand : public QUndoCommand { public: - MoveEffectCommand(CustomTrackView *view, const int track, GenTime pos, int oldPos, int newPos, bool doIt, QUndoCommand * parent = 0); + MoveEffectCommand(CustomTrackView *view, const int track, GenTime pos, int oldPos, int newPos, QUndoCommand * parent = 0); virtual int id() const; virtual bool mergeWith(const QUndoCommand * command); @@ -44,7 +44,6 @@ int m_oldindex; int m_newindex; GenTime m_pos; - bool m_doIt; }; #endif Modified: trunk/kdenlive/src/razorclipcommand.cpp =================================================================== --- trunk/kdenlive/src/razorclipcommand.cpp 2009-04-05 01:29:01 UTC (rev 3216) +++ trunk/kdenlive/src/razorclipcommand.cpp 2009-04-05 02:11:34 UTC (rev 3217) @@ -23,7 +23,7 @@ #include <KLocale> -RazorClipCommand::RazorClipCommand(CustomTrackView *view, const ItemInfo info, const GenTime cutTime, bool doIt, QUndoCommand * parent) : QUndoCommand(parent), m_view(view), m_info(info), m_cutTime(cutTime), m_doIt(doIt) +RazorClipCommand::RazorClipCommand(CustomTrackView *view, const ItemInfo info, const GenTime cutTime, QUndoCommand * parent) : QUndoCommand(parent), m_view(view), m_info(info), m_cutTime(cutTime) { setText(i18n("Razor clip")); } @@ -32,15 +32,12 @@ void RazorClipCommand::undo() { // kDebug()<<"---- undoing action"; - m_doIt = true; m_view->cutClip(m_info, m_cutTime, false); } // virtual void RazorClipCommand::redo() { // kDebug() << "---- redoing action cut: " << m_cutTime.frames(25); - if (m_doIt) m_view->cutClip(m_info, m_cutTime, true); - m_doIt = true; } Modified: trunk/kdenlive/src/razorclipcommand.h =================================================================== --- trunk/kdenlive/src/razorclipcommand.h 2009-04-05 01:29:01 UTC (rev 3216) +++ trunk/kdenlive/src/razorclipcommand.h 2009-04-05 02:11:34 UTC (rev 3217) @@ -32,7 +32,7 @@ class RazorClipCommand : public QUndoCommand { public: - RazorClipCommand(CustomTrackView *view, const ItemInfo info, const GenTime cutTime, bool doIt, QUndoCommand * parent = 0); + RazorClipCommand(CustomTrackView *view, const ItemInfo info, const GenTime cutTime, QUndoCommand * parent = 0); virtual void undo(); virtual void redo(); @@ -40,7 +40,6 @@ CustomTrackView *m_view; ItemInfo m_info; GenTime m_cutTime; - bool m_doIt; }; #endif Modified: trunk/kdenlive/src/splitaudiocommand.cpp =================================================================== --- trunk/kdenlive/src/splitaudiocommand.cpp 2009-04-05 01:29:01 UTC (rev 3216) +++ trunk/kdenlive/src/splitaudiocommand.cpp 2009-04-05 02:11:34 UTC (rev 3217) @@ -23,7 +23,7 @@ #include <KLocale> -SplitAudioCommand::SplitAudioCommand(CustomTrackView *view, const int track, const GenTime &pos, bool doIt, QUndoCommand * parent) : QUndoCommand(parent), m_view(view), m_track(track), m_pos(pos), m_doIt(doIt) +SplitAudioCommand::SplitAudioCommand(CustomTrackView *view, const int track, const GenTime &pos, QUndoCommand * parent) : QUndoCommand(parent), m_view(view), m_track(track), m_pos(pos) { setText(i18n("Split audio")); } @@ -32,15 +32,12 @@ void SplitAudioCommand::undo() { // kDebug()<<"---- undoing action"; - m_doIt = true; m_view->doSplitAudio(m_pos, m_track, false); } // virtual void SplitAudioCommand::redo() { kDebug() << "---- redoing action"; - if (m_doIt) m_view->doSplitAudio(m_pos, m_track, true); - m_doIt = true; } Modified: trunk/kdenlive/src/splitaudiocommand.h =================================================================== --- trunk/kdenlive/src/splitaudiocommand.h 2009-04-05 01:29:01 UTC (rev 3216) +++ trunk/kdenlive/src/splitaudiocommand.h 2009-04-05 02:11:34 UTC (rev 3217) @@ -34,7 +34,7 @@ class SplitAudioCommand : public QUndoCommand { public: - SplitAudioCommand(CustomTrackView *view, const int track, const GenTime &pos, bool doIt, QUndoCommand * parent = 0); + SplitAudioCommand(CustomTrackView *view, const int track, const GenTime &pos, QUndoCommand * parent = 0); virtual void undo(); virtual void redo(); @@ -42,7 +42,6 @@ CustomTrackView *m_view; const GenTime m_pos; const int m_track; - bool m_doIt; }; #endif This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <j-...@us...> - 2009-04-05 16:49:05
|
Revision: 3219 http://kdenlive.svn.sourceforge.net/kdenlive/?rev=3219&view=rev Author: j-b-m Date: 2009-04-05 16:49:02 +0000 (Sun, 05 Apr 2009) Log Message: ----------- Fix crash when opening doc with a transition to track 0 Modified Paths: -------------- trunk/kdenlive/src/kdenlivedoc.cpp trunk/kdenlive/src/trackview.cpp Modified: trunk/kdenlive/src/kdenlivedoc.cpp =================================================================== --- trunk/kdenlive/src/kdenlivedoc.cpp 2009-04-05 11:06:37 UTC (rev 3218) +++ trunk/kdenlive/src/kdenlivedoc.cpp 2009-04-05 16:49:02 UTC (rev 3219) @@ -913,9 +913,9 @@ } } - //kDebug() << "///////////////// CONVERTED DOC:"; - //kDebug() << m_document.toString(); - /* + /*kDebug() << "///////////////// CONVERTED DOC:"; + kDebug() << m_document.toString(); + QFile file( "converted.kdenlive" ); if ( file.open( QIODevice::WriteOnly ) ) { QTextStream stream( &file ); @@ -1584,7 +1584,7 @@ bool KdenliveDoc::isTrackLocked(int ix) const { - return m_tracksList[ix].isLocked; + return m_tracksList.at(ix).isLocked; } void KdenliveDoc::switchTrackVideo(int ix, bool hide) Modified: trunk/kdenlive/src/trackview.cpp =================================================================== --- trunk/kdenlive/src/trackview.cpp 2009-04-05 11:06:37 UTC (rev 3218) +++ trunk/kdenlive/src/trackview.cpp 2009-04-05 16:49:02 UTC (rev 3219) @@ -187,6 +187,7 @@ m_doc->switchTrackVideo(i - 1, true); m_doc->switchTrackAudio(i - 1, true); } + trackduration = slotAddProjectTrack(pos, p, m_doc->isTrackLocked(i - 1)); pos--; //kDebug() << " PRO DUR: " << trackduration << ", TRACK DUR: " << duration; @@ -309,7 +310,7 @@ Transition *tr = new Transition(transitionInfo, a_track, m_doc->fps(), base, isAutomatic); if (forceTrack) tr->setForcedTrack(true, a_track); m_scene->addItem(tr); - if (m_doc->isTrackLocked(b_track - 1)) { + if (b_track > 0 && m_doc->isTrackLocked(b_track - 1)) { tr->setItemLocked(true); } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <j-...@us...> - 2009-04-05 18:15:00
|
Revision: 3220 http://kdenlive.svn.sourceforge.net/kdenlive/?rev=3220&view=rev Author: j-b-m Date: 2009-04-05 18:14:55 +0000 (Sun, 05 Apr 2009) Log Message: ----------- Fix crash when opening Kdenlive 0.5 document, improve compatibility: http://www.kdenlive.org:80/mantis/view.php?id=741 Modified Paths: -------------- trunk/kdenlive/src/kdenlivedoc.cpp trunk/kdenlive/src/trackview.cpp Modified: trunk/kdenlive/src/kdenlivedoc.cpp =================================================================== --- trunk/kdenlive/src/kdenlivedoc.cpp 2009-04-05 16:49:02 UTC (rev 3219) +++ trunk/kdenlive/src/kdenlivedoc.cpp 2009-04-05 18:14:55 UTC (rev 3220) @@ -472,62 +472,90 @@ // move playlists outside of tractor and add the tracks instead int max = playlists.count(); - for (int i = 0; i < max; i++) { - QDomNode n = playlists.at(i); - westley.insertBefore(n, QDomNode()); - QDomElement pl = n.toElement(); - QDomElement track = m_document.createElement("track"); - QString trackType = pl.attribute("hide"); - if (!trackType.isEmpty()) - track.setAttribute("hide", trackType); - QString playlist_id = pl.attribute("id"); - if (playlist_id.isEmpty()) { - playlist_id = "black_track"; - pl.setAttribute("id", playlist_id); + if (westley.isNull()) { + westley = m_document.createElement("westley"); + m_document.documentElement().appendChild(westley); + } + if (tractor.isNull()) { + kDebug() << "// NO WESTLEY PLAYLIST, building empty one"; + QDomElement blank_tractor = m_document.createElement("tractor"); + westley.appendChild(blank_tractor); + QDomElement blank_playlist = m_document.createElement("playlist"); + blank_playlist.setAttribute("id", "black_track"); + westley.insertBefore(blank_playlist, QDomNode()); + QDomElement blank_track = m_document.createElement("track"); + blank_track.setAttribute("producer", "black_track"); + blank_tractor.appendChild(blank_track); + + QDomNodeList kdenlivetracks = m_document.elementsByTagName("kdenlivetrack"); + for (int i = 0; i < kdenlivetracks.count(); i++) { + blank_playlist = m_document.createElement("playlist"); + blank_playlist.setAttribute("id", "playlist" + QString::number(i)); + westley.insertBefore(blank_playlist, QDomNode()); + blank_track = m_document.createElement("track"); + blank_track.setAttribute("producer", "playlist" + QString::number(i)); + blank_tractor.appendChild(blank_track); + if (kdenlivetracks.at(i).toElement().attribute("cliptype") == "Sound") { + blank_playlist.setAttribute("hide", "video"); + blank_track.setAttribute("hide", "video"); + } } - track.setAttribute("producer", playlist_id); - //tractor.appendChild(track); + } else for (int i = 0; i < max; i++) { + QDomNode n = playlists.at(i); + westley.insertBefore(n, QDomNode()); + QDomElement pl = n.toElement(); + QDomElement track = m_document.createElement("track"); + QString trackType = pl.attribute("hide"); + if (!trackType.isEmpty()) + track.setAttribute("hide", trackType); + QString playlist_id = pl.attribute("id"); + if (playlist_id.isEmpty()) { + playlist_id = "black_track"; + pl.setAttribute("id", playlist_id); + } + track.setAttribute("producer", playlist_id); + //tractor.appendChild(track); #define KEEP_TRACK_ORDER 1 #ifdef KEEP_TRACK_ORDER - tractor.insertAfter(track, QDomNode()); + tractor.insertAfter(track, QDomNode()); #else - // Insert the new track in an order that hopefully matches the 3 video, then 2 audio tracks of Kdenlive 0.7.0 - // insertion sort - O( tracks*tracks ) - // Note, this breaks _all_ transitions - but you can move them up and down afterwards. - QDomElement tractor_elem = tractor.toElement(); - if (! tractor_elem.isNull()) { - QDomNodeList tracks = tractor_elem.elementsByTagName("track"); - int size = tracks.size(); - if (size == 0) { - tractor.insertAfter(track, QDomNode()); - } else { - bool inserted = false; - for (int i = 0; i < size; ++i) { - QDomElement track_elem = tracks.at(i).toElement(); - if (track_elem.isNull()) { - tractor.insertAfter(track, QDomNode()); - inserted = true; - break; - } else { - kDebug() << "playlist_id: " << playlist_id << " producer:" << track_elem.attribute("producer"); - if (playlist_id < track_elem.attribute("producer")) { - tractor.insertBefore(track, track_elem); + // Insert the new track in an order that hopefully matches the 3 video, then 2 audio tracks of Kdenlive 0.7.0 + // insertion sort - O( tracks*tracks ) + // Note, this breaks _all_ transitions - but you can move them up and down afterwards. + QDomElement tractor_elem = tractor.toElement(); + if (! tractor_elem.isNull()) { + QDomNodeList tracks = tractor_elem.elementsByTagName("track"); + int size = tracks.size(); + if (size == 0) { + tractor.insertAfter(track, QDomNode()); + } else { + bool inserted = false; + for (int i = 0; i < size; ++i) { + QDomElement track_elem = tracks.at(i).toElement(); + if (track_elem.isNull()) { + tractor.insertAfter(track, QDomNode()); inserted = true; break; + } else { + kDebug() << "playlist_id: " << playlist_id << " producer:" << track_elem.attribute("producer"); + if (playlist_id < track_elem.attribute("producer")) { + tractor.insertBefore(track, track_elem); + inserted = true; + break; + } } } + // Reach here, no insertion, insert last + if (!inserted) { + tractor.insertAfter(track, QDomNode()); + } } - // Reach here, no insertion, insert last - if (!inserted) { - tractor.insertAfter(track, QDomNode()); - } + } else { + kWarning() << "tractor was not a QDomElement"; + tractor.insertAfter(track, QDomNode()); } - } else { - kWarning() << "tractor was not a QDomElement"; - tractor.insertAfter(track, QDomNode()); +#endif } -#endif - } tractor.removeChild(multitrack); // audio track mixing transitions should not be added to track view, so add required attribute @@ -541,6 +569,11 @@ QDomText value = m_document.createTextNode("237"); property.appendChild(value); tr.appendChild(property); + property = m_document.createElement("property"); + property.setAttribute("name", "mlt_service"); + value = m_document.createTextNode("mix"); + property.appendChild(value); + tr.appendChild(property); } else { // convert transition QDomNamedNodeMap attrs = tr.attributes(); @@ -652,13 +685,13 @@ QDomElement prod = producers.at(0).toElement(); // add resource also as a property (to allow path correction in setNewResource()) // TODO: will it work with slowmotion? needs testing - if (!prod.attribute("resource").isEmpty()) { + /*if (!prod.attribute("resource").isEmpty()) { QDomElement prop_resource = m_document.createElement("property"); prop_resource.setAttribute("name", "resource"); QDomText resource = m_document.createTextNode(prod.attribute("resource")); prop_resource.appendChild(resource); prod.appendChild(prop_resource); - } + }*/ QDomNode m = prod.firstChild(); if (!m.isNull()) { if (m.toElement().tagName() == "markers") { @@ -793,38 +826,39 @@ QDomElement wproducer = wproducers.at(i).toElement(); if (wproducer.isNull()) { kWarning() << "Found producer in westley0, that was not a QDomElement"; + continue; + } + if (wproducer.attribute("id") == "black") continue; + // We have to do slightly different things, depending on the type + kDebug() << "Converting producer element with type" << wproducer.attribute("type"); + if (wproducer.attribute("type").toInt() == TEXT) { + kDebug() << "Found TEXT element in producer" << endl; + QDomElement kproducer = wproducer.cloneNode(true).toElement(); + kproducer.setTagName("kdenlive_producer"); + kdenlivedoc_new.appendChild(kproducer); + // TODO: Perhaps needs some more changes here to "frequency", aspect ratio as a float, frame_size, channels, and later, ressource and title name } else { - // We have to do slightly different things, depending on the type - kDebug() << "Converting producer element with type" << wproducer.attribute("type"); - if (wproducer.attribute("type").toInt() == TEXT) { - kDebug() << "Found TEXT element in producer" << endl; - QDomElement kproducer = wproducer.cloneNode(true).toElement(); - kproducer.setTagName("kdenlive_producer"); - kdenlivedoc_new.appendChild(kproducer); - // TODO: Perhaps needs some more changes here to "frequency", aspect ratio as a float, frame_size, channels, and later, ressource and title name - } else { - QDomElement kproducer = m_document.createElement("kdenlive_producer"); - kproducer.setAttribute("id", wproducer.attribute("id")); - if (!wproducer.attribute("description").isEmpty()) - kproducer.setAttribute("description", wproducer.attribute("description")); - kproducer.setAttribute("resource", wproducer.attribute("resource")); - kproducer.setAttribute("type", wproducer.attribute("type")); - // Testing fix for 358 - if (!wproducer.attribute("aspect_ratio").isEmpty()) { - kproducer.setAttribute("aspect_ratio", wproducer.attribute("aspect_ratio")); - } - if (!wproducer.attribute("source_fps").isEmpty()) { - kproducer.setAttribute("fps", wproducer.attribute("source_fps")); - } - if (!wproducer.attribute("length").isEmpty()) { - kproducer.setAttribute("duration", wproducer.attribute("length")); - } - kdenlivedoc_new.appendChild(kproducer); + QDomElement kproducer = m_document.createElement("kdenlive_producer"); + kproducer.setAttribute("id", wproducer.attribute("id")); + if (!wproducer.attribute("description").isEmpty()) + kproducer.setAttribute("description", wproducer.attribute("description")); + kproducer.setAttribute("resource", wproducer.attribute("resource")); + kproducer.setAttribute("type", wproducer.attribute("type")); + // Testing fix for 358 + if (!wproducer.attribute("aspect_ratio").isEmpty()) { + kproducer.setAttribute("aspect_ratio", wproducer.attribute("aspect_ratio")); } - if (wproducer.attribute("id").toInt() > max_kproducer_id) { - max_kproducer_id = wproducer.attribute("id").toInt(); + if (!wproducer.attribute("source_fps").isEmpty()) { + kproducer.setAttribute("fps", wproducer.attribute("source_fps")); } + if (!wproducer.attribute("length").isEmpty()) { + kproducer.setAttribute("duration", wproducer.attribute("length")); + } + kdenlivedoc_new.appendChild(kproducer); } + if (wproducer.attribute("id").toInt() > max_kproducer_id) { + max_kproducer_id = wproducer.attribute("id").toInt(); + } } } #define LOOKUP_FOLDER 1 @@ -915,16 +949,17 @@ /*kDebug() << "///////////////// CONVERTED DOC:"; kDebug() << m_document.toString(); - - QFile file( "converted.kdenlive" ); - if ( file.open( QIODevice::WriteOnly ) ) { - QTextStream stream( &file ); - stream << m_document.toString(); - file.close(); + kDebug() << "///////////////// END CONVERTED DOC:"; + + QFile file("converted.kdenlive"); + if (file.open(QIODevice::WriteOnly)) { + QTextStream stream(&file); + stream << m_document.toString().toUtf8(); + file.close(); } else { - kDebug() << "Unable to dump file to converted.kdenlive"; - } - */ + kDebug() << "Unable to dump file to converted.kdenlive"; + }*/ + //kDebug() << "///////////////// END CONVERTED DOC:"; return true; Modified: trunk/kdenlive/src/trackview.cpp =================================================================== --- trunk/kdenlive/src/trackview.cpp 2009-04-05 16:49:02 UTC (rev 3219) +++ trunk/kdenlive/src/trackview.cpp 2009-04-05 18:14:55 UTC (rev 3220) @@ -154,6 +154,7 @@ // CHeck for invalid producers QDomNode n = producers.item(i); e = n.toElement(); + if (e.hasAttribute("in") == false && e.hasAttribute("out") == false) continue; int in = e.attribute("in").toInt(); int out = e.attribute("out").toInt(); if (in > out || in == out) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ra...@us...> - 2009-04-05 22:25:30
|
Revision: 3227 http://kdenlive.svn.sourceforge.net/kdenlive/?rev=3227&view=rev Author: rayll Date: 2009-04-05 22:25:28 +0000 (Sun, 05 Apr 2009) Log Message: ----------- Remove some more unnecessary empty variable initializations Signed-off-by: Ray Lehtiniemi <ra...@ma...> Modified Paths: -------------- trunk/kdenlive/src/clipmanager.cpp trunk/kdenlive/src/customtrackview.cpp trunk/kdenlive/src/docclipbase.cpp trunk/kdenlive/src/projectlist.cpp Modified: trunk/kdenlive/src/clipmanager.cpp =================================================================== --- trunk/kdenlive/src/clipmanager.cpp 2009-04-05 22:24:22 UTC (rev 3226) +++ trunk/kdenlive/src/clipmanager.cpp 2009-04-05 22:25:28 UTC (rev 3227) @@ -35,10 +35,10 @@ #include <QGraphicsItemGroup> ClipManager::ClipManager(KdenliveDoc *doc) : - m_audioThumbsQueue(QList <QString> ()), + m_audioThumbsQueue(), m_doc(doc), m_audioThumbsEnabled(false), - m_generatingAudioId(QString()) + m_generatingAudioId() { m_clipIdCounter = 1; m_folderIdCounter = 1; Modified: trunk/kdenlive/src/customtrackview.cpp =================================================================== --- trunk/kdenlive/src/customtrackview.cpp 2009-04-05 22:24:22 UTC (rev 3226) +++ trunk/kdenlive/src/customtrackview.cpp 2009-04-05 22:25:28 UTC (rev 3227) @@ -96,7 +96,7 @@ m_dragGuide(NULL), m_visualTip(NULL), m_animation(NULL), - m_clickPoint(QPoint()), + m_clickPoint(), m_autoScroll(KdenliveSettings::autoscroll()), m_changeSpeedAction(NULL), m_pasteEffectsAction(NULL), @@ -105,8 +105,8 @@ m_clipDrag(false), m_findIndex(0), m_tool(SELECTTOOL), - m_copiedItems(QList<AbstractClipItem *> ()), - m_menuPosition(QPoint()), + m_copiedItems(), + m_menuPosition(), m_blockRefresh(false), m_selectionGroup(NULL) { Modified: trunk/kdenlive/src/docclipbase.cpp =================================================================== --- trunk/kdenlive/src/docclipbase.cpp 2009-04-05 22:24:22 UTC (rev 3226) +++ trunk/kdenlive/src/docclipbase.cpp 2009-04-05 22:25:28 UTC (rev 3227) @@ -34,19 +34,19 @@ #include <QCryptographicHash> DocClipBase::DocClipBase(ClipManager *clipManager, QDomElement xml, const QString &id) : - audioFrameChache(QMap<int, QMap<int, QByteArray> > ()), - m_description(QString()), + audioFrameChache(), + m_description(), m_refcount(0), - m_baseTrackProducers(QList <Mlt::Producer *>()), - m_audioTrackProducers(QList <Mlt::Producer *>()), + m_baseTrackProducers(), + m_audioTrackProducers(), m_videoOnlyProducer(NULL), - m_snapMarkers(QList < CommentedTime > ()), - m_duration(GenTime()), + m_snapMarkers(), + m_duration(), m_audioTimer(NULL), m_thumbProd(NULL), m_audioThumbCreated(false), m_id(id), - m_properties(QMap <QString, QString> ()) + m_properties() { int type = xml.attribute("type").toInt(); m_clipType = (CLIPTYPE) type; Modified: trunk/kdenlive/src/projectlist.cpp =================================================================== --- trunk/kdenlive/src/projectlist.cpp 2009-04-05 22:24:22 UTC (rev 3226) +++ trunk/kdenlive/src/projectlist.cpp 2009-04-05 22:25:28 UTC (rev 3227) @@ -65,8 +65,8 @@ m_reloadAction(NULL), m_selectedItem(NULL), m_refreshed(false), - m_infoQueue(QMap <QString, QDomElement> ()), - m_thumbnailQueue(QList <QString> ()) + m_infoQueue(), + m_thumbnailQueue() { listView = new ProjectListView(this);; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <j-...@us...> - 2009-04-05 23:04:36
|
Revision: 3229 http://kdenlive.svn.sourceforge.net/kdenlive/?rev=3229&view=rev Author: j-b-m Date: 2009-04-05 23:04:31 +0000 (Sun, 05 Apr 2009) Log Message: ----------- Fix several title clips problems, including: http://www.kdenlive.org/mantis/view.php?id=597 Modified Paths: -------------- trunk/kdenlive/src/clipmanager.cpp trunk/kdenlive/src/kdenlivedoc.cpp trunk/kdenlive/src/kdenlivedoc.h trunk/kdenlive/src/mainwindow.cpp trunk/kdenlive/src/renderer.cpp trunk/kdenlive/src/renderer.h trunk/kdenlive/src/trackview.cpp Modified: trunk/kdenlive/src/clipmanager.cpp =================================================================== --- trunk/kdenlive/src/clipmanager.cpp 2009-04-05 22:26:19 UTC (rev 3228) +++ trunk/kdenlive/src/clipmanager.cpp 2009-04-05 23:04:31 UTC (rev 3229) @@ -336,7 +336,7 @@ QDomElement prod = doc.createElement("producer"); doc.appendChild(prod); prod.setAttribute("resource", imagePath); - prod.setAttribute("titlename", titleName); + prod.setAttribute("name", titleName); prod.setAttribute("xmldata", xml); uint id = m_clipIdCounter++; prod.setAttribute("id", QString::number(id)); Modified: trunk/kdenlive/src/kdenlivedoc.cpp =================================================================== --- trunk/kdenlive/src/kdenlivedoc.cpp 2009-04-05 22:26:19 UTC (rev 3228) +++ trunk/kdenlive/src/kdenlivedoc.cpp 2009-04-05 23:04:31 UTC (rev 3229) @@ -249,7 +249,7 @@ void KdenliveDoc::setSceneList() { m_render->setSceneList(m_document.toString(), m_startPos); - checkProjectClips(); + //checkProjectClips(); } QDomDocument KdenliveDoc::createEmptyDocument(const int videotracks, const int audiotracks) @@ -1195,6 +1195,10 @@ void KdenliveDoc::checkProjectClips() { if (m_render == NULL) return; + m_clipManager->resetProducersList(m_render->producersList()); + return; + + // Useless now... QList <Mlt::Producer *> prods = m_render->producersList(); QString id ; QString prodId ; @@ -1207,20 +1211,20 @@ if (clip) clip->setProducer(prods.at(i)); 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"); + //kDebug() << "// TITLE: " << clip->getProperty("titlename") << " Preview file: " << clip->getProperty("resource") << " DOES NOT EXIST"; + QString titlename = clip->getProperty("name"); QString titleresource; if (titlename.isEmpty()) { QStringList titleInfo = TitleWidget::getFreeTitleInfo(projectFolder()); titlename = titleInfo.at(0); titleresource = titleInfo.at(1); - clip->setProperty("titlename", titlename); + clip->setProperty("name", titlename); kDebug() << "// New title set to: " << titlename; } else { - titleresource = TitleWidget::getTitleResourceFromName(projectFolder(), titlename); + titleresource = TitleWidget::getFreeTitleInfo(projectFolder()).at(1); + //titleresource = TitleWidget::getTitleResourceFromName(projectFolder(), titlename); } - QString titlepath = projectFolder().path() + "/titles/"; - TitleWidget *dia_ui = new TitleWidget(KUrl(), titlepath, m_render, kapp->activeWindow()); + TitleWidget *dia_ui = new TitleWidget(KUrl(), KUrl(titleresource).directory(), m_render, kapp->activeWindow()); QDomDocument doc; doc.setContent(clip->getProperty("xmldata")); dia_ui->setXml(doc); @@ -1383,26 +1387,27 @@ extension = KUrl(path).fileName(); path = KUrl(path).directory(); } else if (elem.attribute("type").toInt() == TEXT && QFile::exists(path) == false) { - kDebug() << "// TITLE: " << elem.attribute("titlename") << " Preview file: " << elem.attribute("resource") << " DOES NOT EXIST"; - QString titlename = elem.attribute("titlename"); + kDebug() << "// TITLE: " << elem.attribute("name") << " Preview file: " << elem.attribute("resource") << " DOES NOT EXIST"; + QString titlename = elem.attribute("name"); QString titleresource; if (titlename.isEmpty()) { QStringList titleInfo = TitleWidget::getFreeTitleInfo(projectFolder()); titlename = titleInfo.at(0); titleresource = titleInfo.at(1); - elem.setAttribute("titlename", titlename); + elem.setAttribute("name", titlename); kDebug() << "// New title set to: " << titlename; } else { - titleresource = TitleWidget::getTitleResourceFromName(projectFolder(), titlename); + titleresource = TitleWidget::getFreeTitleInfo(projectFolder()).at(1); + //titleresource = TitleWidget::getTitleResourceFromName(projectFolder(), titlename); } - QString titlepath = projectFolder().path() + "/titles/"; - TitleWidget *dia_ui = new TitleWidget(KUrl(), titlepath, m_render, kapp->activeWindow()); + TitleWidget *dia_ui = new TitleWidget(KUrl(), KUrl(titleresource).directory(), m_render, kapp->activeWindow()); QDomDocument doc; doc.setContent(elem.attribute("xmldata")); dia_ui->setXml(doc); QImage pix = dia_ui->renderedPixmap(); pix.save(titleresource); elem.setAttribute("resource", titleresource); + setNewClipResource(clipId, titleresource); delete dia_ui; } if (path.isEmpty() == false && QFile::exists(path) == false && elem.attribute("type").toInt() != TEXT) { Modified: trunk/kdenlive/src/kdenlivedoc.h =================================================================== --- trunk/kdenlive/src/kdenlivedoc.h 2009-04-05 22:26:19 UTC (rev 3228) +++ trunk/kdenlive/src/kdenlivedoc.h 2009-04-05 23:04:31 UTC (rev 3229) @@ -148,7 +148,7 @@ bool convertDocument(double version); QDomDocument createEmptyDocument(const int videotracks, const int audiotracks); QString colorToString(const QColor& c); - void checkProjectClips(); + void setNewClipResource(const QString &id, const QString &path); QString searchFileRecursively(const QDir &dir, const QString &matchSize, const QString &matchHash) const; void moveProjectData(KUrl url); @@ -157,6 +157,7 @@ void slotCreateTextClip(QString group, const QString &groupId); /** Set to true if document needs saving, false otherwise */ void setModified(bool mod = true); + void checkProjectClips(); private slots: void slotAutoSave(); Modified: trunk/kdenlive/src/mainwindow.cpp =================================================================== --- trunk/kdenlive/src/mainwindow.cpp 2009-04-05 22:26:19 UTC (rev 3228) +++ trunk/kdenlive/src/mainwindow.cpp 2009-04-05 23:04:31 UTC (rev 3229) @@ -1071,8 +1071,10 @@ KStandardAction::fullScreen(this, SLOT(slotFullScreen()), this, collection); + /* + //TODO: Add status tooltip to actions ? connect(collection, SIGNAL(actionHovered(QAction*)), - this, SLOT(slotDisplayActionMessage(QAction*))); + this, SLOT(slotDisplayActionMessage(QAction*)));*/ QAction *addClip = new KAction(KIcon("kdenlive-add-clip"), i18n("Add Clip"), this); @@ -1709,6 +1711,7 @@ disconnect(m_projectMonitor, SIGNAL(zoneUpdated(QPoint)), m_activeTimeline, 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_projectMonitor->render, SIGNAL(refreshDocumentProducers()), m_activeDocument, SLOT(checkProjectClips())); disconnect(m_activeDocument, SIGNAL(guidesUpdated()), this, SLOT(slotGuidesUpdated())); @@ -1766,6 +1769,7 @@ connect(m_projectMonitor, SIGNAL(renderPosition(int)), trackView, SLOT(moveCursorPos(int))); connect(m_projectMonitor, SIGNAL(zoneUpdated(QPoint)), trackView, SLOT(slotSetZone(QPoint))); connect(m_projectMonitor, SIGNAL(durationChanged(int)), trackView, SLOT(setDuration(int))); + connect(m_projectMonitor->render, SIGNAL(refreshDocumentProducers()), doc, SLOT(checkProjectClips())); connect(doc, SIGNAL(addProjectClip(DocClipBase *, bool)), m_projectList, SLOT(slotAddClip(DocClipBase *, bool))); connect(doc, SIGNAL(resetProjectList()), m_projectList, SLOT(slotResetProjectList())); connect(doc, SIGNAL(signalDeleteProjectClip(const QString &)), m_projectList, SLOT(slotDeleteClip(const QString &))); Modified: trunk/kdenlive/src/renderer.cpp =================================================================== --- trunk/kdenlive/src/renderer.cpp 2009-04-05 22:26:19 UTC (rev 3228) +++ trunk/kdenlive/src/renderer.cpp 2009-04-05 23:04:31 UTC (rev 3229) @@ -868,6 +868,7 @@ } m_isBlocked = false; blockSignals(false); + emit refreshDocumentProducers(); //kDebug()<<"// SETSCN LST, POS: "<<position; //if (position != 0) emit rendererPosition(position); } Modified: trunk/kdenlive/src/renderer.h =================================================================== --- trunk/kdenlive/src/renderer.h 2009-04-05 22:26:19 UTC (rev 3228) +++ trunk/kdenlive/src/renderer.h 2009-04-05 23:04:31 UTC (rev 3229) @@ -262,6 +262,7 @@ void rendererPosition(int); void rendererStopped(int); void removeInvalidClip(const QString &); + void refreshDocumentProducers(); public slots: // Public slots /** Start Consumer */ Modified: trunk/kdenlive/src/trackview.cpp =================================================================== --- trunk/kdenlive/src/trackview.cpp 2009-04-05 22:26:19 UTC (rev 3228) +++ trunk/kdenlive/src/trackview.cpp 2009-04-05 23:04:31 UTC (rev 3229) @@ -134,7 +134,8 @@ { //int cursorPos = 0; m_documentErrors.clear(); - // kDebug() << "//// DOCUMENT: " << doc.toString(); + + //kDebug() << "//// DOCUMENT: " << doc.toString(); /*QDomNode props = doc.elementsByTagName("properties").item(0); if (!props.isNull()) { cursorPos = props.toElement().attribute("timeline_position").toInt(); @@ -154,9 +155,25 @@ m_invalidProducers.clear(); QDomNodeList producers = doc.elementsByTagName("producer"); for (int i = 0; i < producers.count(); i++) { - // CHeck for invalid producers + // Check for invalid producers QDomNode n = producers.item(i); e = n.toElement(); + + /* + // Check for invalid markup + QDomNodeList params = e.elementsByTagName("property"); + for (int j = 0; j < params.count(); j++) { + QDomElement p = params.item(j).toElement(); + if (p.attribute("name") == "markup") { + QString val = p.text().toUtf8().data(); + kDebug()<<"//FOUND MARKUP, VAL: "<<val; + //e.setAttribute("value", value); + n.removeChild(params.item(j)); + break; + } + } + */ + if (e.hasAttribute("in") == false && e.hasAttribute("out") == false) continue; int in = e.attribute("in").toInt(); int out = e.attribute("out").toInt(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ra...@us...> - 2009-04-07 15:18:13
|
Revision: 3238 http://kdenlive.svn.sourceforge.net/kdenlive/?rev=3238&view=rev Author: rayll Date: 2009-04-07 15:17:47 +0000 (Tue, 07 Apr 2009) Log Message: ----------- Eliminate a virtual function that doesn't actually add any value Signed-off-by: Ray Lehtiniemi <ra...@ma...> Modified Paths: -------------- trunk/kdenlive/src/customtrackview.cpp trunk/kdenlive/src/customtrackview.h Modified: trunk/kdenlive/src/customtrackview.cpp =================================================================== --- trunk/kdenlive/src/customtrackview.cpp 2009-04-07 15:17:03 UTC (rev 3237) +++ trunk/kdenlive/src/customtrackview.cpp 2009-04-07 15:17:47 UTC (rev 3238) @@ -218,13 +218,6 @@ update(); } -// virtual -void CustomTrackView::resizeEvent(QResizeEvent * event) -{ - QGraphicsView::resizeEvent(event); -} - -// virtual /** Zoom or move viewport on mousewheel * * If mousewheel+Ctrl, zooms in/out on the timeline. Modified: trunk/kdenlive/src/customtrackview.h =================================================================== --- trunk/kdenlive/src/customtrackview.h 2009-04-07 15:17:03 UTC (rev 3237) +++ trunk/kdenlive/src/customtrackview.h 2009-04-07 15:17:47 UTC (rev 3238) @@ -166,7 +166,6 @@ virtual void wheelEvent(QWheelEvent * e); virtual QStringList mimeTypes() const; virtual Qt::DropActions supportedDropActions() const; - virtual void resizeEvent(QResizeEvent * event); private: uint m_tracksHeight; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |