[Digikam-devel] extragear/graphics/digikam/libs

Gilles Caulier caulier.gilles at free.fr
Mon Dec 19 12:36:35 GMT 2005


SVN commit 489659 by cgilles:

Digikam from trunk : image histogram sidebar : prepare to use separate thread to load image using future implementation of Marcel Wiesweg

CCMAIL: digikam-devel at kde.org, marcel.wiesweg at gmx.de

 M  +38 -37    imageproperties/imagepropertieshistogramtab.cpp  
 M  +3 -1      imageproperties/imagepropertieshistogramtab.h  
 M  +2 -5      widgets/histogramwidget.cpp  
 M  +2 -2      widgets/histogramwidget.h  


--- trunk/extragear/graphics/digikam/libs/imageproperties/imagepropertieshistogramtab.cpp #489658:489659
@@ -259,9 +259,12 @@
     connect(m_histogramWidget, SIGNAL(signalMouseReleased( int )),
             this, SLOT(slotUpdateMaxInterv(int)));
 
-    connect(m_histogramWidget, SIGNAL(signalHistogramComputationDone()),
-            this, SLOT(slotRefreshOptions()));
-            
+    connect(m_histogramWidget, SIGNAL(signalHistogramComputationDone(bool)),
+            this, SLOT(slotRefreshOptions(bool)));
+
+    connect(m_histogramWidget, SIGNAL(signalHistogramComputationFailed(void)),
+            this, SLOT(slotHistogramComputationFailed(void)));
+                        
     connect(m_minInterv, SIGNAL(valueChanged (int)),
             m_histogramWidget, SLOT(slotMinValueChanged(int)));
 
@@ -329,37 +332,7 @@
                 
     if (!imageData && !imageWidth && !imageHeight)
     {
-
-        m_image = DImg(url.path());
-        
-        if ( !m_image.isNull() )
-        {
-            // If a selection area is done in Image Editor and if the current image is the same 
-            // in Image Editor, then compute too the histogram for this selection.
-            
-            if (m_selectionArea)
-            {
-                m_imageSelection = m_image.copy(*m_selectionArea);
-                m_histogramWidget->updateData(m_image.bits(), m_image.width(), m_image.height(), 
-                                              m_image.sixteenBit(), 
-                                              m_imageSelection.bits(), m_imageSelection.width(),
-                                              m_imageSelection.height());
-                m_regionBG->show();                                      
-                m_maxInterv->setMaxValue(m_image.sixteenBit() ? 65535 : 255);
-            }
-            else 
-            {
-                m_histogramWidget->updateData(m_image.bits(), m_image.width(), m_image.height(),
-                                              m_image.sixteenBit());
-                m_regionBG->hide();
-                m_maxInterv->setMaxValue(m_image.sixteenBit() ? 65535 : 255);
-            }
-        }
-        else 
-        {
-            m_imageSelection.reset();
-            m_histogramWidget->updateData(0L, 0, 0, false);
-        }
+        loadDataFromUrl(url);
     }
     else 
     {
@@ -388,12 +361,30 @@
         }
         else 
         {
-            m_imageSelection.reset();
-            m_histogramWidget->updateData(0L, 0, 0, false);
+            slotHistogramComputationFailed();
         }
     }
 }
 
+void ImagePropertiesHistogramTab::loadDataFromUrl(const KURL& url)
+{
+    // TODO : use a separate thread to load image.
+
+    m_image = DImg(url.path());
+
+    if ( !m_image.isNull() )
+    {
+        m_histogramWidget->updateData(m_image.bits(), m_image.width(), m_image.height(),
+                                        m_image.sixteenBit());
+        m_regionBG->hide();
+        m_maxInterv->setMaxValue(m_image.sixteenBit() ? 65535 : 255);
+    }
+    else
+    {
+        slotHistogramComputationFailed();
+    }
+}
+
 void ImagePropertiesHistogramTab::setSelection(QRect *selectionArea)
 {
     // This is necessary to stop computation because m_image.bits() is currently used by
@@ -416,8 +407,11 @@
     }
 }
 
-void ImagePropertiesHistogramTab::slotRefreshOptions()
+void ImagePropertiesHistogramTab::slotRefreshOptions(bool sixteenBit)
 {
+    m_minInterv->setValue(0);
+    m_maxInterv->setValue(sixteenBit ? 65535 : 255);
+    m_maxInterv->setMaxValue(sixteenBit ? 65535 : 255);
     slotChannelChanged(m_channelCB->currentItem());
     slotScaleChanged(m_scaleBG->selectedId());
     slotColorsChanged(m_colorsCB->currentItem());
@@ -426,6 +420,13 @@
        slotRenderingChanged(m_regionBG->selectedId());
 }
 
+void ImagePropertiesHistogramTab::slotHistogramComputationFailed()
+{
+    m_imageSelection.reset();
+    m_image.reset();
+    m_histogramWidget->updateData(0L, 0, 0, false);
+}
+
 void ImagePropertiesHistogramTab::slotChannelChanged(int channel)
 {
     switch(channel)
--- trunk/extragear/graphics/digikam/libs/imageproperties/imagepropertieshistogramtab.h #489658:489659
@@ -71,11 +71,13 @@
 
 private:
 
+    void loadDataFromUrl(const KURL& url);
     void updateInformation();
     
 private slots:
 
-    void slotRefreshOptions();
+    void slotRefreshOptions(bool sixteenBit);
+    void slotHistogramComputationFailed(void);
     void slotChannelChanged(int channel);
     void slotScaleChanged(int scale);
     void slotColorsChanged(int color);
--- trunk/extragear/graphics/digikam/libs/widgets/histogramwidget.cpp #489658:489659
@@ -180,10 +180,7 @@
             {
                // No current selection. Do not using ImageHistogram::getHistogramSegment()
                // method here because histogram haven't yet computed.
-               if (m_sixteenBits)
-                  emit signalMouseReleased( 65535 );      
-               else
-                  emit signalMouseReleased( 255 );  
+               emit signalMouseReleased( m_sixteenBits ? 65535 : 255 );
             }
             else
             {
@@ -192,7 +189,7 @@
                emit signalMouseReleased( m_xmax );  
             }
 
-            emit signalHistogramComputationDone();
+            emit signalHistogramComputationDone(m_sixteenBits);
         }
         else
         {
--- trunk/extragear/graphics/digikam/libs/widgets/histogramwidget.h #489658:489659
@@ -145,8 +145,8 @@
 
     void signalMousePressed( int );
     void signalMouseReleased( int );
-    void signalHistogramComputationDone(void);
-    void signalHistogramComputationFailed(void);
+    void signalHistogramComputationDone( bool );
+    void signalHistogramComputationFailed( void );
 
 public slots:
 



More information about the Digikam-devel mailing list