Fwd: extragear/graphics/digikam/digikam

classic Classic list List threaded Threaded
4 messages Options
Reply | Threaded
Open this post in threaded view
|

Fwd: extragear/graphics/digikam/digikam

Bugzilla from andi.clemens@gmx.net
Marcel,

digiKam is crashing immediately now.

Thread [1] (Suspended: Signal 'SIGSEGV' received. Description: Segmentation
fault.)
        43 QSortFilterProxyModel::parent()  0xb627cac4
        42 QModelIndex::parent() /usr/include/QtCore/qabstractitemmodel.h:369
0x080da68e
        41 QItemSelectionRange::contains()
/usr/include/QtGui/qitemselectionmodel.h:85 0x082a979d
        40 Digikam::ImageRatingOverlay::slotDataChanged()
/home/andi/Programmieren/KDE/digiKam/digikam_KDE4/digikam/digikam/imageratingoverlay.cpp:146
0x082a96d5
        39 Digikam::ImageRatingOverlay::qt_metacall()
/home/andi/Programmieren/KDE/digiKam/digikam_KDE4/digikam/digikam/imageratingoverlay.moc:75
0x082a9113
        38 QMetaObject::activate()  0xb57e0441
        37 QMetaObject::activate()  0xb57e10b2
        36 QAbstractItemModel::dataChanged()  0xb581a519
        35 <symbol is not available> 0xb6284641
        34 QSortFilterProxyModel::qt_metacall()  0xb62853d4
        33 Digikam::ImageFilterModel::qt_metacall()
/home/andi/Programmieren/KDE/digiKam/digikam_KDE4/digikam/digikam/imagefiltermodel.moc:96
0xb70046ca
        32 Digikam::ImageAlbumFilterModel::qt_metacall()
/home/andi/Programmieren/KDE/digiKam/digikam_KDE4/digikam/digikam/imagealbumfiltermodel.moc:68
0x08201f40
        31 QMetaObject::activate()  0xb57e0441
        30 QMetaObject::activate()  0xb57e10b2
        29 QAbstractItemModel::dataChanged()  0xb581a519
        28 Digikam::ImageThumbnailModel::slotThumbnailLoaded()
/home/andi/Programmieren/KDE/digiKam/digikam_KDE4/digikam/libs/models/imagethumbnailmodel.cpp:128
0xb700e30d
        27 Digikam::ImageThumbnailModel::qt_metacall()
/home/andi/Programmieren/KDE/digiKam/digikam_KDE4/digikam/digikam/imagethumbnailmodel.moc:68
0xb700dbf6
        26 Digikam::ImageAlbumModel::qt_metacall()
/home/andi/Programmieren/KDE/digiKam/digikam_KDE4/digikam/digikam/imagealbummodel.moc:94
0x082003b4
        25 QMetaObject::activate()  0xb57e0441
        24 QMetaObject::activate()  0xb57e10b2
        23 Digikam::ThumbnailLoadThread::signalThumbnailLoaded()
/home/andi/Programmieren/KDE/digiKam/digikam_KDE4/digikam/digikam/thumbnailloadthread.moc:100
0xb7238403
        22 Digikam::ThumbnailLoadThread::slotThumbnailLoaded()
/home/andi/Programmieren/KDE/digiKam/digikam_KDE4/digikam/libs/threadimageio/thumbnailloadthread.cpp:376
0xb723a0a3
        21 Digikam::ThumbnailLoadThread::slotThumbnailsAvailable()
/home/andi/Programmieren/KDE/digiKam/digikam_KDE4/digikam/libs/threadimageio/thumbnailloadthread.cpp:347
0xb7239d93
        20 Digikam::ThumbnailLoadThread::qt_metacall()
/home/andi/Programmieren/KDE/digiKam/digikam_KDE4/digikam/digikam/thumbnailloadthread.moc:84
0xb7238319
        19 QMetaCallEvent::placeMetaCall()  0xb57d8f0b
        18 QObject::event()  0xb57da60e
        17 QApplicationPrivate::notify_helper()  0xb5c786ac
        16 QApplication::notify()  0xb5c7fe44
        15 KApplication::notify()  0xb689124a
        14 QCoreApplication::notifyInternal()  0xb57ca39b
        13 QCoreApplicationPrivate::sendPostedEvents()  0xb57cae58
        12 QCoreApplication::sendPostedEvents()  0xb57cb02d
        11 <symbol is not available> 0xb57f599f
        10 g_main_context_dispatch()  0xb4fb0288
        9 g_main_context_iterate()  0xb4fb3878
        8 g_main_context_iteration()  0xb4fb39ea
        7 QEventDispatcherGlib::processEvents()  0xb57f55cc
        6 <symbol is not available> 0xb5d17535
        5 QEventLoop::processEvents()  0xb57c8929
        4 QEventLoop::exec()  0xb57c8d72
        3 QCoreApplication::exec()  0xb57cb0ef
        2 QApplication::exec()  0xb5c78527
        1 main()
/home/andi/Programmieren/KDE/digiKam/digikam_KDE4/digikam/digikam/main.cpp:184
0x082ff69b


Andi


SVN commit 975515 by mwiesweg:

Hover rating in icon view is back!
Add the necessary connection to delegate (to not draw rating starts beneath transparent rating box widget)
and to MetadataManager via DigikamImageView.
Structure code in ImageRatingOverlay. Listen to dataChanged() for the case that rating changes
while hovering.

 M  +12 -0     digikamimageview.cpp  
 M  +2 -0      digikamimageview.h  
 M  +60 -12    imageratingoverlay.cpp  
 M  +13 -3     imageratingoverlay.h  


--- trunk/extragear/graphics/digikam/digikam/digikamimageview.cpp #975514:975515
@@ -53,6 +53,7 @@
 #include "imagealbummodel.h"
 #include "imagealbumfiltermodel.h"
 #include "imagedragdrop.h"
+#include "imageratingoverlay.h"
 #include "imageviewutilities.h"
 #include "imagewindow.h"
 #include "metadatamanager.h"
@@ -87,6 +88,9 @@
 
     setToolTipEnabled(AlbumSettings::instance()->getShowToolTips());
 
+    ImageRatingOverlay *ratingOverlay = new ImageRatingOverlay(this);
+    addOverlay(ratingOverlay);
+
     d->utilities = new ImageViewUtilities(this);
 
     connect(d->utilities, SIGNAL(editorCurrentUrlChanged(const KUrl &)),
@@ -94,6 +98,9 @@
 
     connect(imageModel()->dragDropHandler(), SIGNAL(dioResult(KJob *)),
             d->utilities, SLOT(slotDIOResult(KJob*)));
+
+    connect(ratingOverlay, SIGNAL(ratingEdited(const QModelIndex &, int)),
+            this, SLOT(assignRating(const QModelIndex &,int)));
 }
 
 DigikamImageView::~DigikamImageView()
@@ -314,6 +321,11 @@
     MetadataManager::instance()->assignRating(selectedImageInfos(), rating);
 }
 
+void DigikamImageView::assignRating(const QModelIndex &index, int rating)
+{
+    MetadataManager::instance()->assignRating(QList<ImageInfo>() << imageFilterModel()->imageInfo(index), rating);
+}
+
 void DigikamImageView::setAsAlbumThumbnail(const ImageInfo& setAsThumbnail)
 {
     d->utilities->setAsAlbumThumbnail(currentAlbum(), setAsThumbnail);
--- trunk/extragear/graphics/digikam/digikam/digikamimageview.h #975514:975515
@@ -72,6 +72,8 @@
     void setExifOrientationOfSelected(int orientation);
     void renameCurrent();
 
+    void assignRating(const QModelIndex &index, int rating);
+
 Q_SIGNALS:
 
     void previewRequested(const ImageInfo& info);
--- trunk/extragear/graphics/digikam/digikam/imageratingoverlay.cpp #975514:975515
@@ -58,46 +58,94 @@
     return new RatingBox(parentWidget());
 }
 
-void ImageRatingOverlay::mouseMoved(QMouseEvent *e, const QRect& visualRect, const QModelIndex&)
+void ImageRatingOverlay::setActive(bool active)
 {
+    AbstractWidgetDelegateOverlay::setActive(active);
+
+    if (active)
+    {
+        connect(ratingBox(), SIGNAL(signalRatingChanged(int)),
+                this, SLOT(slotRatingChanged(int)));
+
+        connect(view()->model(), SIGNAL(dataChanged(const QModelIndex &, const QModelIndex &)),
+                this, SLOT(slotDataChanged(const QModelIndex &, const QModelIndex &)));
+    }
+}
+
+void ImageRatingOverlay::mouseMoved(QMouseEvent *e, const QRect& visualRect, const QModelIndex &index)
+{
+    if (index != m_index)
+        return;
+
     QRect rect = delegate()->ratingRect();
     rect.translate(visualRect.topLeft());
 
     if (rect.contains(e->pos()))
+    {
+        delegate()->setRatingEdited(m_index);
+        view()->update(m_index);
         m_widget->show();
+    }
     else
-        m_widget->hide();
+    {
+        hide();
+    }
 }
 
 void ImageRatingOverlay::visualChange()
 {
     if (m_widget && m_widget->isVisible())
-        updateBox(m_index);
+        updatePosition();
 }
 
-void ImageRatingOverlay::updateBox(const QModelIndex& index)
+void ImageRatingOverlay::hide()
 {
+    delegate()->setRatingEdited(QModelIndex());
+    AbstractWidgetDelegateOverlay::hide();
+}
+
+void ImageRatingOverlay::updatePosition()
+{
+    if (!m_index.isValid())
+        return;
+
     QRect rect = delegate()->ratingRect();
-    QRect visualRect = m_view->visualRect(index);
+    QRect visualRect = m_view->visualRect(m_index);
     rect.translate(visualRect.topLeft());
 
     m_widget->setFixedSize(rect.width() + 1, rect.height() + 1);
     m_widget->move(rect.topLeft());
 }
 
+void ImageRatingOverlay::updateRating()
+{
+    if (!m_index.isValid())
+        return;
+    ImageInfo info = ImageModel::retrieveImageInfo(m_index);
+    ratingBox()->setRating(info.rating());
+}
+
+void ImageRatingOverlay::slotRatingChanged(int rating)
+{
+    if (m_index.isValid())
+        emit ratingEdited(m_index, rating);
+}
+
 void ImageRatingOverlay::slotEntered(const QModelIndex& index)
 {
-    // do _not_ call base class
+    // do _not_ call base class, which shows the widget
 
     m_index = index;
 
-    if (m_index.isValid())
-    {
-        ImageInfo info = ImageModel::retrieveImageInfo(m_index);
-        ratingBox()->setRating(info.rating());
-        updateBox(m_index);
-    }
+    updatePosition();
+    updateRating();
 }
 
+void ImageRatingOverlay::slotDataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight)
+{
+    if (m_index.isValid() && QItemSelectionRange(topLeft, bottomRight).contains(m_index))
+        updateRating();
+}
+
 } // namespace Digikam
 
--- trunk/extragear/graphics/digikam/digikam/imageratingoverlay.h #975514:975515
@@ -50,17 +50,27 @@
 
     RatingBox *ratingBox() const;
 
+Q_SIGNALS:
+
+    void ratingEdited(const QModelIndex &index, int rating);
+
+protected Q_SLOTS:
+
+    void slotRatingChanged(int);
+    void slotDataChanged(const QModelIndex &, const QModelIndex &);
+
 protected:
 
     virtual QWidget *createWidget();
+    virtual void setActive(bool);
     virtual void visualChange();
+    virtual void hide();
     virtual void mouseMoved(QMouseEvent *e, const QRect& visualRect, const QModelIndex& index);
     virtual void slotEntered(const QModelIndex& index);
 
-protected:
+    void updatePosition();
+    void updateRating();
 
-    void updateBox(const QModelIndex &index);
-
     QModelIndex m_index;
 };
 

_______________________________________________
Digikam-devel mailing list
[hidden email]
https://mail.kde.org/mailman/listinfo/digikam-devel
Reply | Threaded
Open this post in threaded view
|

Re: Fwd: extragear/graphics/digikam/digikam

Marcel Wiesweg
> Marcel,
>
> digiKam is crashing immediately now.


Please try my last commit


_______________________________________________
Digikam-devel mailing list
[hidden email]
https://mail.kde.org/mailman/listinfo/digikam-devel
Reply | Threaded
Open this post in threaded view
|

Re: Fwd: extragear/graphics/digikam/digikam

Bugzilla from andi.clemens@gmx.net
Ok seems to work now, but ratings are not saved to metadata anymore.
Should I add this to the spreadsheet or do you think it is something else?


On Saturday 30 May 2009 16:28:46 Marcel Wiesweg wrote:
> > Marcel,
> >
> > digiKam is crashing immediately now.
>
> Please try my last commit

_______________________________________________
Digikam-devel mailing list
[hidden email]
https://mail.kde.org/mailman/listinfo/digikam-devel
Reply | Threaded
Open this post in threaded view
|

Re: Fwd: extragear/graphics/digikam/digikam

Marcel Wiesweg
> Ok seems to work now, but ratings are not saved to metadata anymore.
> Should I add this to the spreadsheet or do you think it is something else?


This was a different and unrelated bug. It's fixed now.


Marcel


_______________________________________________
Digikam-devel mailing list
[hidden email]
https://mail.kde.org/mailman/listinfo/digikam-devel