From 43c74f884965987e0906d94a43d95d426d392fc5 Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Mardelle Date: Tue, 7 Oct 2008 10:36:17 +0000 Subject: [PATCH] Fix crash with copied clips svn path=/branches/KDE4/; revision=2437 --- src/abstractclipitem.cpp | 3 ++- src/abstractgroupitem.cpp | 3 ++- src/clipitem.cpp | 3 ++- src/customtrackscene.cpp | 4 ++-- src/customtrackscene.h | 4 ++-- src/customtrackview.cpp | 6 +++++- 6 files changed, 15 insertions(+), 8 deletions(-) diff --git a/src/abstractclipitem.cpp b/src/abstractclipitem.cpp index c0d8bb80..b1b7d661 100644 --- a/src/abstractclipitem.cpp +++ b/src/abstractclipitem.cpp @@ -349,5 +349,6 @@ QRect AbstractClipItem::visibleRect() { } CustomTrackScene* AbstractClipItem::projectScene() { - return static_cast (scene()); + if (scene()) return static_cast (scene()); + return NULL; } diff --git a/src/abstractgroupitem.cpp b/src/abstractgroupitem.cpp index 41d05583..268bb930 100644 --- a/src/abstractgroupitem.cpp +++ b/src/abstractgroupitem.cpp @@ -40,7 +40,8 @@ int AbstractGroupItem::type() const { } CustomTrackScene* AbstractGroupItem::projectScene() { - return static_cast (scene()); + if (scene()) return static_cast (scene()); + return NULL; } diff --git a/src/clipitem.cpp b/src/clipitem.cpp index 30eb0eb6..d3d4712e 100644 --- a/src/clipitem.cpp +++ b/src/clipitem.cpp @@ -41,7 +41,7 @@ ClipItem::ClipItem(DocClipBase *clip, ItemInfo info, double fps) - : AbstractClipItem(info, QRectF(), fps), m_clip(clip), m_resizeMode(NONE), m_grabPoint(0), m_maxTrack(0), m_hasThumbs(false), startThumbTimer(NULL), endThumbTimer(NULL), m_effectsCounter(1), audioThumbWasDrawn(false), m_opacity(1.0), m_timeLine(0), m_startThumbRequested(false), m_endThumbRequested(false), m_startFade(0), m_endFade(0), m_hover(false), m_selectedEffect(-1), m_speed(1.0), framePixelWidth(0) { + : AbstractClipItem(info, QRectF(), fps), m_clip(clip), m_resizeMode(NONE), m_grabPoint(0), m_maxTrack(0), m_hasThumbs(false), startThumbTimer(NULL), endThumbTimer(NULL), m_effectsCounter(1), audioThumbWasDrawn(false), m_opacity(1.0), m_timeLine(0), m_startThumbRequested(false), m_endThumbRequested(false), m_startFade(0), m_endFade(0), m_hover(false), m_selectedEffect(-1), m_speed(1.0), framePixelWidth(0), m_startPix(QPixmap()), m_endPix(QPixmap()) { setRect(0, 0, (info.endPos - info.startPos).frames(fps) - 0.02, (qreal)(KdenliveSettings::trackheight() - 2)); setPos((qreal) info.startPos.frames(fps), (qreal)(info.track * KdenliveSettings::trackheight()) + 1); @@ -336,6 +336,7 @@ void ClipItem::slotSetEndThumb(QImage img) { } void ClipItem::slotThumbReady(int frame, QPixmap pix) { + if (scene() == NULL) return; QRectF r = sceneBoundingRect(); double width = m_startPix.width() / projectScene()->scale(); if (m_startThumbRequested && frame == m_cropStart.frames(m_fps)) { diff --git a/src/customtrackscene.cpp b/src/customtrackscene.cpp index e5603200..e9879399 100644 --- a/src/customtrackscene.cpp +++ b/src/customtrackscene.cpp @@ -72,11 +72,11 @@ void CustomTrackScene::setScale(double scale) { m_scale = scale; } -double CustomTrackScene::scale() { +double CustomTrackScene::scale() const { return m_scale; } -int CustomTrackScene::tracksCount() { +int CustomTrackScene::tracksCount() const { return m_tracksList.count(); } diff --git a/src/customtrackscene.h b/src/customtrackscene.h index 9f037b83..d8a3f4f7 100644 --- a/src/customtrackscene.h +++ b/src/customtrackscene.h @@ -43,9 +43,9 @@ public: GenTime nextSnapPoint(GenTime pos); double getSnapPointForPos(double pos, bool doSnap = true); void setScale(double scale); - double scale(); + double scale() const; QList m_tracksList; - int tracksCount(); + int tracksCount() const; QPixmap m_transitionPixmap; private: diff --git a/src/customtrackview.cpp b/src/customtrackview.cpp index c6725d3e..a2dbe4ac 100644 --- a/src/customtrackview.cpp +++ b/src/customtrackview.cpp @@ -72,7 +72,7 @@ // const int duration = animate ? 1500 : 1; CustomTrackView::CustomTrackView(KdenliveDoc *doc, CustomTrackScene* projectscene, QWidget *parent) - : QGraphicsView(projectscene, parent), m_scene(projectscene), m_cursorPos(0), m_dropItem(NULL), m_cursorLine(NULL), m_operationMode(NONE), m_dragItem(NULL), m_visualTip(NULL), m_moveOpMode(NONE), m_animation(NULL), m_projectDuration(0), m_clickPoint(QPoint()), m_document(doc), m_autoScroll(KdenliveSettings::autoscroll()), m_tracksHeight(KdenliveSettings::trackheight()), m_tool(SELECTTOOL), m_dragGuide(NULL), m_findIndex(0), m_menuPosition(QPoint()), m_blockRefresh(false), m_selectionGroup(NULL), m_selectedTrack(0) { + : QGraphicsView(projectscene, parent), m_scene(projectscene), m_cursorPos(0), m_dropItem(NULL), m_cursorLine(NULL), m_operationMode(NONE), m_dragItem(NULL), m_visualTip(NULL), m_moveOpMode(NONE), m_animation(NULL), m_projectDuration(0), m_clickPoint(QPoint()), m_document(doc), m_autoScroll(KdenliveSettings::autoscroll()), m_tracksHeight(KdenliveSettings::trackheight()), m_tool(SELECTTOOL), m_dragGuide(NULL), m_findIndex(0), m_menuPosition(QPoint()), m_blockRefresh(false), m_selectionGroup(NULL), m_selectedTrack(0), m_copiedItems(QList ()), m_selectedClipList(QList ()) { if (doc) m_commandStack = doc->commandStack(); else m_commandStack == NULL; setMouseTracking(true); @@ -1469,6 +1469,10 @@ void CustomTrackView::cutSelectedClips() { void CustomTrackView::addClip(QDomElement xml, const QString &clipId, ItemInfo info, EffectsList effects) { DocClipBase *baseclip = m_document->clipManager()->getClipById(clipId); + if (baseclip == NULL) { + emit displayMessage(i18n("No clip copied"), ErrorMessage); + return; + } ClipItem *item = new ClipItem(baseclip, info, m_document->fps()); item->setEffectList(effects); scene()->addItem(item); -- 2.39.2