Bug 145236 - small wishes for the light-table
Summary: small wishes for the light-table
Status: CLOSED WORKSFORME
Alias: None
Product: digikam
Classification: Applications
Component: LightTable-Engine (show other bugs)
Version: unspecified
Platform: Debian stable Linux
: NOR wishlist
Target Milestone: ---
Assignee: Digikam Developers
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2007-05-09 18:15 UTC by Arnd Baecker
Modified: 2012-09-03 07:01 UTC (History)
0 users

See Also:
Latest Commit:
Version Fixed In: 0.9.2
Sentry Crash Report:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Arnd Baecker 2007-05-09 18:15:50 UTC
Version:            (using KDE KDE 3.5.5)
Installed from:    Debian stable Packages

Some more small (or big?) wishes

a) The switching of the synchronization of previews works 
   very nice.
   It would be very convenient (i.e. much faster) for quick
   adjustments, that for example 
   CTRL-slider (and CTRL-middle-mouse-button move)
   would just do the unsynchronized operation?
b) A way to go through pairs of images of the thumb-bar
   one after-another, i.e. 
   [ image 1] [ image 2]
   are displayed side by side; then pressing 
   (for example) Page-Up would show
   [ image 2] [image 3]

could be used such that
   Page-Up leads to the prese
c) left-double click on thumb: insert into left panel
   right-double click on thumb: inser into right panel
d) keyboard navigation in the thumbs-display?


P.S.: Is there a way to more directly enter bugs in the B.K.O for
the same component than to go through the whole sequence
(of specifying KDE version, OS, ...) every time again?
Comment 1 Arnd Baecker 2007-05-09 18:19:11 UTC
Umpf, this one got garbled before submission
(did I already mention that I really do hate this B.K.O ????)
Comment 2 caulier.gilles 2007-05-10 20:47:14 UTC
SVN commit 663291 by cgilles:

digikam from trunk: Light Table : use CTRL+R and CTRL+L to place thumbbar item on Right or Left panel.
CCBUGS: 145236


 M  +2 -2      lighttablewindow.cpp  


--- trunk/extragear/graphics/digikam/utilities/lighttable/lighttablewindow.cpp #663290:663291
@@ -377,12 +377,12 @@
     // -- Standard 'File' menu actions ---------------------------------------------
 
     d->setItemLeftAction = new KAction(i18n("Show item on left panel"), "previous",
-                                       0, this, SLOT(slotSetItemLeft()),
+                                       CTRL+Key_L, this, SLOT(slotSetItemLeft()),
                                        actionCollection(), "lighttable_setitemleft");
     d->setItemLeftAction->setEnabled(false);
 
     d->setItemRightAction = new KAction(i18n("Show item on right panel"), "next",
-                                       0, this, SLOT(slotSetItemRight()),
+                                       CTRL+Key_R, this, SLOT(slotSetItemRight()),
                                        actionCollection(), "lighttable_setitemright");
     d->setItemRightAction->setEnabled(false);
 
Comment 3 caulier.gilles 2007-05-10 21:30:24 UTC
SVN commit 663302 by cgilles:

digikam from trunk : Light Table : added "File/Delete" option in main menu
CCBUGS: 145236


 M  +10 -10    project/digikam.kdevelop  
 M  +49 -40    utilities/lighttable/lighttablewindow.cpp  
 M  +1 -0      utilities/lighttable/lighttablewindow.h  
 M  +3 -1      utilities/lighttable/lighttablewindowui.rc  


--- trunk/extragear/graphics/digikam/project/digikam.kdevelop #663301:663302
@@ -12,10 +12,10 @@
     </keywords>
     <projectdirectory>./</projectdirectory>
     <absoluteprojectpath>false</absoluteprojectpath>
-    <description/>
+    <description></description>
     <ignoreparts/>
     <projectname>digikam</projectname>
-    <defaultencoding/>
+    <defaultencoding></defaultencoding>
   </general>
   <kdevfileview>
     <groups>
@@ -75,10 +75,10 @@
     <general>
       <dbgshell>libtool</dbgshell>
       <programargs/>
-      <gdbpath/>
-      <configGdbScript/>
-      <runShellScript/>
-      <runGdbScript/>
+      <gdbpath></gdbpath>
+      <configGdbScript></configGdbScript>
+      <runShellScript></runShellScript>
+      <runGdbScript></runGdbScript>
       <breakonloadinglibs>true</breakonloadinglibs>
       <separatetty>false</separatetty>
       <floatingtoolbar>false</floatingtoolbar>
@@ -113,12 +113,12 @@
     <run>
       <directoryradio>build</directoryradio>
       <customdirectory>/</customdirectory>
-      <mainprogram>digikam/digikam/digikam</mainprogram>
-      <programargs/>
+      <mainprogram>/home/gilles/Documents/devel/SVN/trunk/graphics/digikam/digikam/digikam</mainprogram>
+      <programargs></programargs>
       <terminal>false</terminal>
       <autocompile>false</autocompile>
       <envvars/>
-      <globaldebugarguments/>
+      <globaldebugarguments></globaldebugarguments>
       <globalcwd>../digikam</globalcwd>
       <useglobalprogram>true</useglobalprogram>
       <autoinstall>false</autoinstall>
@@ -192,7 +192,7 @@
       <includePaths>.;</includePaths>
     </codecompletion>
     <creategettersetter>
-      <prefixGet/>
+      <prefixGet></prefixGet>
       <prefixSet>set</prefixSet>
       <prefixVariable>m_,_</prefixVariable>
       <parameterName>theValue</parameterName>
--- trunk/extragear/graphics/digikam/utilities/lighttable/lighttablewindow.cpp #663301:663302
@@ -75,43 +75,40 @@
 
     LightTableWindowPriv()
     {
-        fullScreenHideToolBar               = true;
-        fullScreen                          = false;
-        removeFullScreenButton              = false;
-        cancelSlideShow                     = false;
-        star0                               = 0;
-        star1                               = 0;
-        star2                               = 0;
-        star3                               = 0;
-        star4                               = 0;
-        star5                               = 0;
-        accelerators                        = 0;
-        leftSidebar                         = 0;
-        rightSidebar                        = 0;
-        previewView                         = 0;
-        barView                             = 0;
-        hSplitter                           = 0;
-        vSplitter                           = 0;
-        syncPreviewAction                   = 0;
-        autoSyncPreviewAction               = 0;
-        clearListAction                     = 0;
-        setItemLeftAction                   = 0;
-        setItemRightAction                  = 0;
-        removeItemAction                    = 0;
-        fileDeleteAction                    = 0;
-        slideShowAction                     = 0;
-        fullScreenAction                    = 0;
-        fileDeletePermanentlyAction         = 0;
-        fileDeletePermanentlyDirectlyAction = 0;
-        fileTrashDirectlyAction             = 0;
-        donateMoneyAction                   = 0;
-        zoomFitToWindowAction               = 0;
-        zoomTo100percents                   = 0;
-        zoomPlusAction                      = 0;
-        zoomMinusAction                     = 0;
-        statusProgressBar                   = 0;
-        leftZoomBar                         = 0;  
-        rightZoomBar                        = 0;  
+        fullScreenHideToolBar  = true;
+        fullScreen             = false;
+        removeFullScreenButton = false;
+        cancelSlideShow        = false;
+        star0                  = 0;
+        star1                  = 0;
+        star2                  = 0;
+        star3                  = 0;
+        star4                  = 0;
+        star5                  = 0;
+        accelerators           = 0;
+        leftSidebar            = 0;
+        rightSidebar           = 0;
+        previewView            = 0;
+        barView                = 0;
+        hSplitter              = 0;
+        vSplitter              = 0;
+        syncPreviewAction      = 0;
+        autoSyncPreviewAction  = 0;
+        clearListAction        = 0;
+        setItemLeftAction      = 0;
+        setItemRightAction     = 0;
+        removeItemAction       = 0;
+        fileDeleteAction       = 0;
+        slideShowAction        = 0;
+        fullScreenAction       = 0;
+        donateMoneyAction      = 0;
+        zoomFitToWindowAction  = 0;
+        zoomTo100percents      = 0;
+        zoomPlusAction         = 0;
+        zoomMinusAction        = 0;
+        statusProgressBar      = 0;
+        leftZoomBar            = 0;  
+        rightZoomBar           = 0;  
     }
 
     bool                      fullScreenHideToolBar;
@@ -137,9 +134,6 @@
     KAction                  *fileDeleteAction;
     KAction                  *slideShowAction;
     KAction                  *donateMoneyAction;
-    KAction                  *fileDeletePermanentlyAction;
-    KAction                  *fileDeletePermanentlyDirectlyAction;
-    KAction                  *fileTrashDirectlyAction;
     KAction                  *zoomPlusAction;
     KAction                  *zoomMinusAction;
     KAction                  *zoomTo100percents;
@@ -394,7 +388,14 @@
     d->clearListAction = new KAction(i18n("Clear all items"), "editshred",
                                      0, this, SLOT(slotClearItemsList()),
                                      actionCollection(), "lighttable_clearlist");
+    d->clearListAction->setEnabled(false);
 
+    d->fileDeleteAction = new KAction(i18n("Move to Trash"), "edittrash",
+                                     Key_Delete,
+                                     this, SLOT(slotDeleteItem()),
+                                     actionCollection(), "lighttable_filedelete");
+    d->fileDeleteAction->setEnabled(false);
+
     KStdAction::quit(this, SLOT(close()), actionCollection(), "lighttable_exit");
 
     // -- Standard 'View' menu actions ---------------------------------------------
@@ -609,6 +610,7 @@
         d->setItemRightAction->setEnabled(true);
         d->removeItemAction->setEnabled(true);
         d->clearListAction->setEnabled(true);
+        d->fileDeleteAction->setEnabled(true);
     }
     else
     {
@@ -616,6 +618,7 @@
         d->setItemRightAction->setEnabled(false);
         d->removeItemAction->setEnabled(false);
         d->clearListAction->setEnabled(false);
+        d->fileDeleteAction->setEnabled(false);
     }
 
     d->previewView->checkForSelection(info);
@@ -690,6 +693,12 @@
     d->barView->clear();
 }
 
+void LightTableWindow::slotDeleteItem()
+{
+    if (d->barView->currentItemImageInfo())
+        slotDeleteItem(d->barView->currentItemImageInfo());
+}
+
 void LightTableWindow::slotDeleteItem(ImageInfo* info)
 {
     bool ask         = true;
--- trunk/extragear/graphics/digikam/utilities/lighttable/lighttablewindow.h #663301:663302
@@ -105,6 +105,7 @@
     void slotToggleSyncPreview();
 
     void slotEditItem(ImageInfo*);
+    void slotDeleteItem();
     void slotDeleteItem(ImageInfo*);
     void slotItemSelected(ImageInfo*);
 
--- trunk/extragear/graphics/digikam/utilities/lighttable/lighttablewindowui.rc #663301:663302
@@ -1,5 +1,5 @@
 <!DOCTYPE kpartgui SYSTEM "kpartgui.dtd">
-<gui version="10" name="lighttablewindow" >
+<gui version="11" name="lighttablewindow" >
 
 <MenuBar>
 
@@ -10,6 +10,8 @@
         <Action name="lighttable_removeitem" />
         <Action name="lighttable_clearlist" />
         <Separator/>
+        <Action name="lighttable_filedelete" />
+        <Separator/>
         <Action name="lighttable_exit" />
     </Menu>
     
Comment 4 caulier.gilles 2007-05-12 08:49:50 UTC
SVN commit 663723 by cgilles:

digikam from trunk: Light Table : re-synchronize preview properlly when "Sync Left/Right" panel option is toogle on.
CCBUGS: 145236



 M  +4 -0      lighttableview.cpp  
 M  +1 -1      lighttablewindow.cpp  


--- trunk/extragear/graphics/digikam/utilities/lighttable/lighttableview.cpp #663722:663723
@@ -143,6 +143,10 @@
 void LightTableView::setSyncPreview(bool sync)
 {
     d->syncPreview = sync;
+
+    // Left panel like a reference to resync preview.
+    if (d->syncPreview)    
+        slotLeftContentsMoved(d->leftPreview->contentsX(), d->leftPreview->contentsY());
 }
 
 void LightTableView::slotDecreaseZoom()
--- trunk/extragear/graphics/digikam/utilities/lighttable/lighttablewindow.cpp #663722:663723
@@ -1230,7 +1230,7 @@
 {
     d->zoomPlusAction->setEnabled(d->syncPreviewAction->isChecked());
     d->zoomMinusAction->setEnabled(d->syncPreviewAction->isChecked());
-    d->previewView->setSyncPreview(d->syncPreviewAction->isChecked());
+    d->previewView->setSyncPreview(d->syncPreviewAction->isChecked());    
 }
 
 void LightTableWindow::slotToggleOnSyncPreview(bool t)
Comment 5 caulier.gilles 2007-05-12 21:37:11 UTC
SVN commit 663963 by cgilles:

digiKam from trunk : Light Table : Add "Navigate by Pair" option.

In this mode drag & drop is disable between thumbbar and left/right panels.
The options to set amnually the item on Left or Right panel are also disable (main menu and pop-up menu)

The light table will set automaticly the left item with the current item selected on thumbbar and the right item 
is the next item on thumbbar.

CCBUGS: 145236


 M  +26 -7     lighttablebar.cpp  
 M  +4 -0      lighttablebar.h  
 M  +23 -9     lighttablepreview.cpp  
 M  +2 -0      lighttablepreview.h  
 M  +6 -0      lighttableview.cpp  
 M  +1 -0      lighttableview.h  
 M  +47 -2     lighttablewindow.cpp  
 M  +1 -0      lighttablewindow.h  
 M  +3 -1      lighttablewindowui.rc  


--- trunk/extragear/graphics/digikam/utilities/lighttable/lighttablebar.cpp #663962:663963
@@ -56,7 +56,8 @@
 {
     setMouseTracking(true);
     readToolTipSettings();
-    m_toolTip = new LightTableBarToolTip(this);
+    m_toolTip        = new LightTableBarToolTip(this);
+    m_navigateByPair = false;
 
     connect(ThemeEngine::instance(), SIGNAL(signalThemeChanged()),
             this, SLOT(slotUpdate()));
@@ -95,6 +96,11 @@
     delete m_toolTip;
 }
 
+void LightTableBar::setNavigateByPair(bool b)
+{
+    m_navigateByPair = b;
+}
+
 void LightTableBar::slotImageRatingChanged(Q_LLONG imageId)
 {
     for (ThumbBarItem *item = firstItem(); item; item = item->next())
@@ -124,6 +130,13 @@
         popmenu.insertItem(SmallIcon("previous"), i18n("Show on left panel"), 10);
         popmenu.insertItem(SmallIcon("next"), i18n("Show on right panel"), 11);
         popmenu.insertItem(SmallIcon("editimage"), i18n("Edit"), 12);
+        
+        if (m_navigateByPair)
+        {
+            popmenu.setItemEnabled(10, false);    
+            popmenu.setItemEnabled(11, false);    
+        }
+
         popmenu.insertSeparator();
         popmenu.insertItem(SmallIcon("fileclose"), i18n("Remove"), 13);
         popmenu.insertItem(SmallIcon("editshred"), i18n("Clear all"), 14);
@@ -219,13 +232,16 @@
 
 void LightTableBar::setOnLeftPanel(const ImageInfo* info)
 {
-    if (!info) return;
-
     for (ThumbBarItem *item = firstItem(); item; item = item->next())
     {
         LightTableBarItem *ltItem = dynamic_cast<LightTableBarItem*>(item);
         if (ltItem)
-            ltItem->setOnLeftPanel(ltItem->info()->id() == info->id());
+        {
+            if (info)
+                ltItem->setOnLeftPanel(ltItem->info()->id() == info->id());
+            else
+                ltItem->setOnLeftPanel(false);
+        }
     }
 
     triggerUpdate();
@@ -233,13 +249,16 @@
 
 void LightTableBar::setOnRightPanel(const ImageInfo* info)
 {
-    if (!info) return;
-
     for (ThumbBarItem *item = firstItem(); item; item = item->next())
     {
         LightTableBarItem *ltItem = dynamic_cast<LightTableBarItem*>(item);
         if (ltItem)
-            ltItem->setOnRightPanel(ltItem->info()->id() == info->id());
+        {
+            if (info)
+                ltItem->setOnRightPanel(ltItem->info()->id() == info->id());
+            else
+                ltItem->setOnRightPanel(false);
+        }
     }
 
     triggerUpdate();
--- trunk/extragear/graphics/digikam/utilities/lighttable/lighttablebar.h #663962:663963
@@ -72,6 +72,8 @@
 
     void removeItem(const ImageInfo* info);
 
+    void setNavigateByPair(bool b);
+
 signals:
 
     void signalLightTableBarItemSelected(ImageInfo*);
@@ -104,6 +106,8 @@
 
 private:
 
+    bool                  m_navigateByPair;
+
     QPixmap               m_ratingPixmap;
 
     LightTableBarToolTip *m_toolTip;
--- trunk/extragear/graphics/digikam/utilities/lighttable/lighttablepreview.cpp #663962:663963
@@ -91,6 +91,7 @@
         hasPrev              = false;
         hasNext              = false;
         selected             = false;
+        dragAndDropEnabled   = true;
         currentFitWindowZoom = 0;
         previewSize          = 1024;
     }
@@ -98,6 +99,7 @@
     bool               hasPrev;
     bool               hasNext;
     bool               selected;
+    bool               dragAndDropEnabled;
 
     int                previewSize;
 
@@ -172,6 +174,11 @@
     delete d;
 }
 
+void LightTablePreview::setDragAndDropEnabled(bool b)
+{
+    d->dragAndDropEnabled = b;
+}
+
 void LightTablePreview::setImage(const QImage& image)
 {   
     d->preview = image;
@@ -647,15 +654,18 @@
     d->path      = QString(); 
     d->imageInfo = 0;
 
-    QPixmap pix(visibleWidth(), visibleHeight());
-    pix.fill(ThemeEngine::instance()->baseColor());
-    QPainter p(&pix);
-    p.setPen(QPen(ThemeEngine::instance()->textRegColor()));
-    p.drawText(0, 0, pix.width(), pix.height(),
-               Qt::AlignCenter|Qt::WordBreak, 
-               i18n("Drag and drop here an item"));
-    p.end();
-    setImage(pix.convertToImage());
+    if (d->dragAndDropEnabled)
+    {
+        QPixmap pix(visibleWidth(), visibleHeight());
+        pix.fill(ThemeEngine::instance()->baseColor());
+        QPainter p(&pix);
+        p.setPen(QPen(ThemeEngine::instance()->textRegColor()));
+        p.drawText(0, 0, pix.width(), pix.height(),
+                Qt::AlignCenter|Qt::WordBreak, 
+                i18n("Drag and drop here an item"));
+        p.end();
+        setImage(pix.convertToImage());
+    }
 
     updateZoomAndSize(true);
     emit signalPreviewLoaded(false);
@@ -671,6 +681,8 @@
 
 void LightTablePreview::contentsDragMoveEvent(QDragMoveEvent *e)
 {
+    if (!d->dragAndDropEnabled) return;
+
     KURL::List      urls;
     KURL::List      kioURLs;        
     QValueList<int> albumIDs;
@@ -686,6 +698,8 @@
 
 void LightTablePreview::contentsDropEvent(QDropEvent *e)
 {
+    if (!d->dragAndDropEnabled) return;
+
     KURL::List      urls;
     KURL::List      kioURLs;        
     QValueList<int> albumIDs;
--- trunk/extragear/graphics/digikam/utilities/lighttable/lighttablepreview.h #663962:663963
@@ -68,6 +68,8 @@
 
     void setSelected(bool sel);
 
+    void setDragAndDropEnabled(bool b); 
+
 signals:
 
     void signalDroppedItems(const ImageInfoList&);
--- trunk/extragear/graphics/digikam/utilities/lighttable/lighttableview.cpp #663962:663963
@@ -149,6 +149,12 @@
         slotLeftContentsMoved(d->leftPreview->contentsX(), d->leftPreview->contentsY());
 }
 
+void LightTableView::setNavigateByPair(bool b)
+{
+    d->leftPreview->setDragAndDropEnabled(!b); 
+    d->rightPreview->setDragAndDropEnabled(!b); 
+}
+
 void LightTableView::slotDecreaseZoom()
 {
     if (!d->syncPreview) return;
--- trunk/extragear/graphics/digikam/utilities/lighttable/lighttableview.h #663962:663963
@@ -51,6 +51,7 @@
     ~LightTableView();
 
     void   setSyncPreview(bool sync);
+    void   setNavigateByPair(bool b);
 
     void   setLeftImageInfo(ImageInfo* info=0);
     void   setRightImageInfo(ImageInfo* info=0);
--- trunk/extragear/graphics/digikam/utilities/lighttable/lighttablewindow.cpp #663962:663963
@@ -113,6 +113,7 @@
         backwardAction         = 0;
         firstAction            = 0;
         lastAction             = 0;
+        navigateByPairAction   = 0;
     }
 
     bool                      autoSyncPreview;
@@ -152,6 +153,7 @@
 
     KToggleAction            *fullScreenAction;
     KToggleAction            *syncPreviewAction;
+    KToggleAction            *navigateByPairAction;
 
     KAccel                   *accelerators;
 
@@ -464,6 +466,12 @@
                                             actionCollection(), "lighttable_syncpreview");
     d->syncPreviewAction->setEnabled(false);
 
+    d->navigateByPairAction = new KToggleAction(i18n("Navigate by Pair"), "kcmsystem",
+                                            CTRL+SHIFT+Key_P, this,
+                                            SLOT(slotToggleNavigateByPair()),
+                                            actionCollection(), "lighttable_navigatebypair");
+    d->navigateByPairAction->setEnabled(false);
+
     d->zoomPlusAction = KStdAction::zoomIn(d->previewView, SLOT(slotIncreaseZoom()),
                                           actionCollection(), "lighttable_zoomplus");
     d->zoomPlusAction->setEnabled(false);
@@ -685,6 +693,8 @@
         d->forwardAction->setEnabled(true);
         d->firstAction->setEnabled(true);
         d->lastAction->setEnabled(true);
+        d->syncPreviewAction->setEnabled(true);
+        d->navigateByPairAction->setEnabled(true);
 
         LightTableBarItem* curr = d->barView->findItemByInfo(info);
         if (curr)
@@ -700,6 +710,26 @@
                 d->forwardAction->setEnabled(false);
                 d->lastAction->setEnabled(false);
             }
+
+            if (d->navigateByPairAction->isChecked())
+            {
+                d->setItemLeftAction->setEnabled(false);
+                d->setItemRightAction->setEnabled(false);
+  
+                d->barView->setOnLeftPanel(info);
+                slotSetItemOnLeftPanel(info);
+
+                LightTableBarItem* next = dynamic_cast<LightTableBarItem*>(curr->next());
+                if (next)
+                {
+                    d->barView->setOnRightPanel(next->info());
+                    slotSetItemOnRightPanel(next->info());
+                }
+                else
+                {
+                    slotSetItemOnRightPanel(0);
+                }
+            }
         }
     }
     else
@@ -714,6 +744,8 @@
         d->forwardAction->setEnabled(false);
         d->firstAction->setEnabled(false);
         d->lastAction->setEnabled(false);
+        d->syncPreviewAction->setEnabled(false);
+        d->navigateByPairAction->setEnabled(false);
     }
 
     d->previewView->checkForSelection(info);
@@ -762,13 +794,19 @@
 void LightTableWindow::slotSetItemOnLeftPanel(ImageInfo* info)
 {
     d->previewView->setLeftImageInfo(info);
-    d->leftSidebar->itemChanged(info);
+    if (info)
+        d->leftSidebar->itemChanged(info);
+    else
+        d->leftSidebar->slotNoCurrentItem();
 }
 
 void LightTableWindow::slotSetItemOnRightPanel(ImageInfo* info)
 {
     d->previewView->setRightImageInfo(info);
-    d->rightSidebar->itemChanged(info);
+    if (info)
+        d->rightSidebar->itemChanged(info);
+    else
+        d->rightSidebar->slotNoCurrentItem();
 }
 
 void LightTableWindow::slotClearItemsList()
@@ -1274,5 +1312,12 @@
     d->barView->setSelected( d->barView->lastItem() );
 }
 
+void LightTableWindow::slotToggleNavigateByPair()
+{
+    d->barView->setNavigateByPair(d->navigateByPairAction->isChecked());
+    d->previewView->setNavigateByPair(d->navigateByPairAction->isChecked());
+    slotItemSelected(d->barView->currentItemImageInfo());
+}
+
 }  // namespace Digikam
 
--- trunk/extragear/graphics/digikam/utilities/lighttable/lighttablewindow.h #663962:663963
@@ -112,6 +112,7 @@
 
     void slotToggleOnSyncPreview(bool);
     void slotToggleSyncPreview();
+    void slotToggleNavigateByPair();
 
     void slotEditItem();
     void slotEditItem(ImageInfo*);
--- trunk/extragear/graphics/digikam/utilities/lighttable/lighttablewindowui.rc #663962:663963
@@ -1,5 +1,5 @@
 <!DOCTYPE kpartgui SYSTEM "kpartgui.dtd">
-<gui version="15" name="lighttablewindow" >
+<gui version="17" name="lighttablewindow" >
 
 <MenuBar>
 
@@ -26,6 +26,7 @@
         <Action name="lighttable_slideshow" />
         <Separator/>
         <Action name="lighttable_syncpreview" />
+        <Action name="lighttable_navigatebypair" />
         <Separator/>
         <Action name="lighttable_zoomplus" /> 
         <Action name="lighttable_zoomminus" /> 
@@ -63,6 +64,7 @@
      <Separator/>     
      <Action name="lighttable_setitemleft" />
      <Action name="lighttable_setitemright" />
+     <Action name="lighttable_navigatebypair" />     
      <Separator/>     
      <Action name="lighttable_zoomfit2window" /> 
      <Action name="lighttable_zoomfit2select" /> 
Comment 6 Arnd Baecker 2007-05-12 21:58:38 UTC
> digiKam from trunk : Light Table : Add "Navigate by Pair" option.


Great!!

Two small issues:
- if you zoom in (and optionally pan), and then move
  to the next pair, the zoom gets reset. I think it should
  stay at the previous position
- if you remove an item from the thumb-bar,
  the left panel is emptied, even though (usually) a valid
  pair exists.

  BTW: what about having a short-cut key to remove an item
  from the thumbbar?
  (DEL is used,  maybe D/d ?)

Many thanks, Arnd
Comment 7 caulier.gilles 2007-05-13 09:54:21 UTC
SVN commit 664131 by cgilles:

digikam from trunk : Light Table : do not lost zoom level synchronization between Left and Right panels using "NAvigate by Pair" function.
CCBUGS: 145236


 M  +4 -4      lighttableview.cpp  
 M  +14 -11    lighttablewindow.cpp  


--- trunk/extragear/graphics/digikam/utilities/lighttable/lighttableview.cpp #664130:664131
@@ -329,22 +329,22 @@
 
 void LightTableView::slotLeftPreviewLoaded(bool success)
 {
-    emit signalLeftPreviewLoaded(success);
-
     checkForSyncPreview();
     d->leftLoading = false;
     slotRightContentsMoved(d->rightPreview->contentsX(), 
                            d->rightPreview->contentsY());
+
+    emit signalLeftPreviewLoaded(success);
 }
 
 void LightTableView::slotRightPreviewLoaded(bool success)
 {
-    emit signalRightPreviewLoaded(success);
-
     checkForSyncPreview();
     d->rightLoading = false;
     slotLeftContentsMoved(d->leftPreview->contentsX(), 
                           d->leftPreview->contentsY());
+
+    emit signalRightPreviewLoaded(success);
 }
 
 void LightTableView::checkForSyncPreview()
--- trunk/extragear/graphics/digikam/utilities/lighttable/lighttablewindow.cpp #664130:664131
@@ -666,6 +666,20 @@
     LightTableBarItem *item = d->barView->findItemByInfo(d->previewView->leftImageInfo());
     if (item) item->setOnLeftPanel(true);
     d->barView->update();
+
+    if (d->navigateByPairAction->isChecked() && item)
+    {
+        LightTableBarItem* next = dynamic_cast<LightTableBarItem*>(item->next());
+        if (next)
+        {
+            d->barView->setOnRightPanel(next->info());
+            slotSetItemOnRightPanel(next->info());
+        }
+        else
+        {
+            slotSetItemOnRightPanel(0);
+        }
+    }
 }
 
 void LightTableWindow::slotRightPreviewLoaded(bool b)
@@ -718,17 +732,6 @@
   
                 d->barView->setOnLeftPanel(info);
                 slotSetItemOnLeftPanel(info);
-
-                LightTableBarItem* next = dynamic_cast<LightTableBarItem*>(curr->next());
-                if (next)
-                {
-                    d->barView->setOnRightPanel(next->info());
-                    slotSetItemOnRightPanel(next->info());
-                }
-                else
-                {
-                    slotSetItemOnRightPanel(0);
-                }
             }
         }
     }
Comment 8 caulier.gilles 2007-05-13 18:20:10 UTC
SVN commit 664297 by cgilles:

digikam from trunk : Light Table : 
- when thumbbar is empty, enable properlly all menu options when new item are inserted.
- when "Navigate by Pair" option is enable and when an item is removed from thumbbar, reorganize properlly the pair.
CCBUGS: 145236



 M  +16 -6     lighttablewindow.cpp  


--- trunk/extragear/graphics/digikam/utilities/lighttable/lighttablewindow.cpp #664296:664297
@@ -596,14 +596,23 @@
     {
         if (!d->barView->findItemByInfo(*it))
         {
-            LightTableBarItem *item = new LightTableBarItem(d->barView, *it);
-            if (*it == imageInfoCurrent)
-            {
-                d->barView->setSelectedItem(item);
-            }
+            new LightTableBarItem(d->barView, *it);
         }
     }   
 
+    if (imageInfoCurrent)
+    {
+        LightTableBarItem *ltItem = dynamic_cast<LightTableBarItem*>(d->barView->findItemByInfo(imageInfoCurrent));
+        if (ltItem) 
+            d->barView->setSelectedItem(ltItem);
+    }
+    else
+    {
+        LightTableBarItem *ltItem = dynamic_cast<LightTableBarItem*>(d->barView->firstItem());
+        if (ltItem) 
+            d->barView->setSelectedItem(ltItem);
+    }
+
     // if window is iconified, show it
     if (isMinimized())
     {
@@ -921,7 +930,8 @@
     }
 
     d->barView->removeItem(info);
-    d->previewView->checkForSelection(d->barView->currentItemImageInfo());
+    d->barView->setSelected(d->barView->currentItem());
+    //d->previewView->checkForSelection(d->barView->currentItemImageInfo());
 }
 
 void LightTableWindow::slotEditItem()
Comment 9 caulier.gilles 2007-05-13 18:21:02 UTC
All is fixed now. i close this file.

Gilles