|
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 |
|
> Marcel,
> > digiKam is crashing immediately now. _______________________________________________ Digikam-devel mailing list [hidden email] https://mail.kde.org/mailman/listinfo/digikam-devel |
|
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 |
|
> 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? _______________________________________________ Digikam-devel mailing list [hidden email] https://mail.kde.org/mailman/listinfo/digikam-devel |
| Free forum by Nabble | Edit this page |
