Summary: | easy comparing similar pictures using a lighttable | ||
---|---|---|---|
Product: | [Applications] digikam | Reporter: | Oliver Doerr <kde> |
Component: | LightTable-Engine | Assignee: | Digikam Developers <digikam-bugs-null> |
Status: | RESOLVED FIXED | ||
Severity: | wishlist | CC: | Julien, lure, marcel.wiesweg, mikmach |
Priority: | NOR | ||
Version: | 0.9.0 | ||
Target Milestone: | --- | ||
Platform: | unspecified | ||
OS: | Linux | ||
Latest Commit: | Version Fixed In: | 0.9.2 | |
Sentry Crash Report: | |||
Attachments: |
First Mocup of lighttable in album gui
Second Light Table sidebar with content resizable... first (and uncomplete) light table implementation... patch to test new Thumbbar implementation depending of digiKam DB Thumbbar for LT using digiKam DB informations. |
Description
Oliver Doerr
2006-10-03 16:16:02 UTC
Yes, I agree, this is a very common situation, in particular with digital cameras one for example easily takes 10-20 pictures of a group of people to find just one good shot ;-). To compare details (like sharpness, ...) it would be very helpful (essential?) to have something like "linked zooming". I.e. one images is declared as the "master image" (default would be the first). Zooming inside the master image (or any of the others) also zooms into all the others images in the light box. Moving around in the master image also moves the other images accordingly. Moving around in one of the other images does not affect the master image (and also none of the other ones); this would allow to accomodate for shifts in the images easily. Concerning the interface: Maybe a layout like a time-line view below, together with the lighttable above is suitable: [ ] [ ] (+ other variants like 2x1, 1x2, [ ] [ ] 3x1, 1x3, 2x2, 3x2, 2x3, 3x3) [ Image 1 ] [ Image 2 ] [ ] [ ] [ ] [ ] --------------------------------------- [ ... Thumb0 Thumb1 Thumb2 Thumb3 ....] Then one could select one (or several) thumbs and drag them onto the lighttable. Could this be an extension of the F3 view in digikam? Best, Arnd A couple of nice screenshots are at http://www.macworld.com/news/2006/01/08/lightroomfirstlook/index.php *** Bug 121311 has been marked as a duplicate of this bug. *** I agree that this would be a killer app. I'm often looking at 4-5 similar pictures that I've snapped with my digital camera. This could save a lot of time. *** This bug has been confirmed by popular vote. *** Hey guy, If you want a "light table" tool in digiKam, i need to get some inspirations from LightRoom and others software witch support this feature. Please attach screenshots of this tool in action in this file. Thanks in advance Gilles Caulier No screenshot, but link to page demonstrating various form of comparing form in Apple's Aperture: http://www.apple.com/aperture/compare/index.html ---------------------------------------------------- Producenci "Opowie This might be a quite good description: http://www.iview-multimedia.com/mediapro/3_lighttable.php and also 3 and 8 at: http://digitalmedia.oreilly.com/2006/11/01/top-ten-aperture-features.html (BTW: the Loupe mentioned in 7 sounds great ;-). It seems that a couple of the lighttable tools allow for free form placement of images etc. I am not sure if this is really the most important aspect, as a normal arangement might be enough for the purpose. However, it is not obvious, what the best realization would be; some thoughts: - select a bunch of images in the album view - invoke the light-table. In this one the images shown as large as possible. Should this be a) a separate full-screen view? b) a view, embedded like the one obtained from F3? c) should it be (optionally) possible to see the thumbnails as well (in a much smaller size?) (See e.g. http://www.apple.com/aperture/compare/compare.html) - linked zooming and panning is important (to detect closed eyes, judge sharpness, ...) - once zoomed in: a) do we need small scroll-bars at each image? b) A small pop-up thumb, in the lower right corner where the scroll-bars (would) meet, to navigate in the image (see gimp) - there has to be a simple way to remove images from the lighttable (without deleting them and maybe also with deletion) - rating should work Best, Arnd From my point of view a first solution might be as simple as allowing multiple instances of the viewing window (for me two pictures simultaneously are enough). Another idea is from (amateur) astronomy: To find moving objects within astronomical pictures (of the same area) one quickly shows two figures one after the other. The minor change of the moving asteroid clearly shows up (because this typically is the only difference). For me a similar approach would be helpful to compare two pictures, show them quickly one after the other, e.g. by pressing spacebar to immediately switch to the next picture or automatically at a selectable frequency (if display is fast enough). One might extend that idea to display two selectable regions even of the same picture to compare color/brightness... The advantage of showing the two pictures in sequence is that one has less constraints with monitor size resp. reduced picture size. Since my proposal only compares two pictures the GUI might be simple, too. Select two pictures from digikam albums and press the (new) compare button. Zooming and moving can be done on each display individually, maybe with an additional sync button to show the same portion of picture1 within picture2. Here is very good screenshot of Aperture's lighttable: http://www.apple.com/au/aperture/compare/lighttable.html And simpler compare form: http://www.apple.com/au/aperture/compare/compare.html Note that at least partial solution would be possibility to multiple instances of ImageEditor. *** Bug 103351 has been marked as a duplicate of this bug. *** Created attachment 20223 [details]
First Mocup of lighttable in album gui
This is my first moc-up of a possible light table in albumgui.
On the left, a new sidebar tab named "Light Table" appear. It include a
thumbbar view instance (same than showfoto) where you can drag and drop image
from album view. The Light Table view sound like a virtual album where you put
the picture to compares.
On the center, the current Preview mode witch zoom/pan the current selected
picture on light table.
Current problem is than thumbbar view has a fixed size. If this first light
table approach is fine for you, i will working on thummbar to perform auto
resizing of content depending of sidebar size...
Gilles
I think that this mock-up lacks the most important bit: to compare several (2, 3, ...) pictures side-by-side, like the second one of #10, with linked zooming and panning to judge about sharpness etc, but maybe I am missing something (it is not yet in svn to test, right?) The thumbbar to the left looks fine to me. Gilles, I think this will be (at least to me) one of the most important new features for digikam and it seems to be a non-trivial one to get it right, so it might take a couple of iterations until everyone is really happy with it ;-) ... Am Wednesday 11 April 2007 schrieb Arnd Baecker:
> I think that this mock-up lacks the most important bit: to compare
> several (2, 3, ...) pictures side-by-side, like the second one of #10,
> with linked zooming and panning to judge about sharpness etc,
> but maybe I am missing something (it is not yet in svn to test, right?)
I agree with Arnd, direct comparison is paramount for a light table. (The
other functions [close-up inspection] of a real light table of the past are
covered by the great zoom functions, that work perfect after the last patch).
Gerhard
> This is my first moc-up of a possible light table in albumgui.
>
> On the left, a new sidebar tab named "Light Table" appear. It include a
> thumbbar view instance (same than showfoto) where you can drag and drop
> image
> from album view. The Light Table view sound like a virtual album where
> you put
> the picture to compares.
>
> On the center, the current Preview mode witch zoom/pan the current
> selected
> picture on light table.
>
> Current problem is than thumbbar view has a fixed size. If this first
> light
> table approach is fine for you, i will working on thummbar to perform auto
> resizing of content depending of sidebar size...
Looks good.
I am not sure about method of LT population. Wouldn't it be
easier/faster to populate it automatically by showing current selection
from album? It will limit LT only to current Album view but it includes
also Tags, Date and Searches.
Most LT comparisons are done for very similar images which will probably
from the same album/tag/date. I would view LT as fast temporary tag.
What other users think?
----------------------------------------------------
Ka
To Arnd, #13 : >I think that this mock-up lacks the most important bit: to compare >several (2, 3, ...) pictures side-by-side, like the second one of #10, >with linked zooming and panning to judge about sharpness etc, >but maybe I am missing something (it is not yet in svn to test, right?) This first moc-up only introduce the way to place somewhere the pictures to compare in the Light Table. The way to display picture on preview is a second pass, especially how to render preview : - Simple Preview (like now), - Side By Side preview, - On mouse over Preview, etc. >The thumbbar to the left looks fine to me. >Gilles, I think this will be (at least to me) one of the >most important new features >for digikam and it seems to be a non-trivial one to get it right, >so it might take a couple of iterations until everyone >is really happy with it ;-) ... sure. I will progress step by step with this feature. Gilles To Mik, #15 : >I am not sure about method of LT population. Wouldn't it be >easier/faster to populate it automatically by showing current selection >from album? Well it simple : 1/ you can drag and drop the selection from and album to LT sidebar icon. 2/ use the new option "put on LT" from album view pop-up menu. >It will limit LT only to current Album view but it includes >also Tags, Date and Searches. no. Thumbbar work with KURL. we can put images from everywhere. Gilles > covered by the great zoom functions, that work perfect after the last
> patch).
While I am not afraid for multiple comparisons in main view (Gilles post
to Marcel few days ago) I see one problem with zoom. While it is great
function for regular use it uses some downscaled version of image. For
real comparison when you need to compare minor details down to pixel
level it is not good enough. If I misunderstood Gilles post from
yesterday(? - sorry, writing from work and cannot give proper
quotations) I would be very happy.
----------------------------------------------------
Diane Wei Liang "OKO JADEITU" -
> - Simple Preview (like now),
> - Side By Side preview,
> - On mouse over Preview,
Gilles, why not use the same widget as the one for the preview for filters ? it could be generalised for n pictures.
#17 Gilles: > 2/ use the new option "put on LT" from album view pop-up menu. Would it be possible to make an option: "Automatically put selection in LT" ? > no. Thumbbar work with KURL. we can put images from everywhere. My proposition would limit places of origin. Your solution gives more flexibility but slows down workflow (IMO). > I am not sure about method of LT population. Wouldn't it be > easier/faster to populate it automatically by showing current selection > from album? Sounds rather efficient: just select and one keypress (whatever that will be ;-) brings one into the LT mode with those images. > It will limit LT only to current Album view but it includes > also Tags, Date and Searches. I think that this would be fine (and not a real limitation) > Most LT comparisons are done for very similar images which will probably > from the same album/tag/date. I would view LT as fast temporary tag. > What other users think? It is behind the scenes to the user, so that's fine. At some later point a workflow for selecting/rejecting images from the lightable should be added (maybe the rating CTRL-1 CTRL 5) is already enough. In the longer run: the idea of stacks of images (described in point4 of http://digitalmedia.oreilly.com/2006/11/01/top-ten-aperture-features.html ) seems also relevant in this context and should presumably kept in mind. (Of course, grouping of images has been mentioned as a wish http://bugs.kde.org/show_bug.cgi?id=121310 before, but would require changes to the digikam database) Created attachment 20226 [details]
Second Light Table sidebar with content resizable...
Nice! A minor detail: as it is only one vertical sequence of thumbs, one could reduce the spacing between the images (I don't think that there is a need to leave space for a portrait image). To Arnd, #23: The resizable ThumbBar implementation is in svn now. Showfoto is patched to use it. Load a collection of images in Showfoto and resize the bar to look how it's work... Gilles To Julien, #19:
>Gilles, why not use the same widget as the one for the preview for filters ? it >could be generalised for n pictures.
Yes, this is the way to do... but the current code of the widget witch give the comparison tools in image plugins depand of core image editor. We cannot use it directly in album gui.
I need to refactorize the code in another way : make a generic comparison tools implementation undependant of core editor and create new derivate class to use it in image plugins.
This a tedious coding activity. I need more time. I will do in first a LT without comparison tools. Just a pan/scrolling mode, and when this one will be finalized and tested indeep, i will code the comparison tools part... I'm not sure to do it for 0.9.2...
Of course, if somebody is interressed to help me to implement it, let's me hear. This will save time for me and speed up development...
Guy, it's time to learn C++/Qt/KDE coding (:=)))
Gilles
OK - works very well and fast!! Only going from one image to the next (and back-and-forth), takes longer than for example in gqview - caching is not yet used here, right?) Minor point: Even in fit to window mode, the small cross in the lower right-corner (to pan the window) is shown. In this case one can move the red-white enclosed box by around 2 pixels (either horizontally or vertically); might be some round-off error. Second minor point is the vertical spacing between images in landscape orientation: is it technically possible to have different vertical sizes for portrait and landscape images? >Only going from one image to the next (and back-and-forth), takes
>longer than for example in gqview - caching is not yet used here, right?)
You want mean, if there is a cache system in showfoto/image editor to load images ? Well yes, there is. I let's Marcel explain to you how it's work. This part have been coded by him (:=)))...
About others point, let's me take a look...
Gilles
Am Wednesday 11 April 2007 schrieb Arnd Baecker: > > It is behind the scenes to the user, so that's fine. > At some later point a workflow for selecting/rejecting images > from the lightable should be added (maybe the rating CTRL-1 CTRL 5) > is already enough. > > In the longer run: the idea of stacks of images > (described in point4 of > http://digitalmedia.oreilly.com/2006/11/01/top-ten-aperture-features.html > ) I was just listening to this podcast about aperture: http://digitalmedia.oreilly.com/2006/12/21/inside_aperture_podcast-5.html It is really appalling to hear Apple sell the stuff we have implemented in digiKam since quite a while as the newest and latest hype on the market. It is really time that we hit the big market and bust their fat asses :-) Gerhard Created attachment 20237 [details]
first (and uncomplete) light table implementation...
This patch is an uncomplete approach of Light Table embedded in album gui and
using a sidebar tab on the left.
Do not claim than this implentation do not work in any case: it's uncomplete
and not fully tested.
I post this patch to have a first feedback, epecially to see if the way to have
the Light table embedded in Album Gui is the right way.
I'm not fully satisfied by it (:=))). I think than light table must be a
separate tool like Image Editor... But i'm not sure...
Of course the tool do not provide yet the way to compare image. The light table
sidebar tab is just a container to group the image to compare. When you select
an idem, it appear on the center using preview mode. You can just pan/scroll...
To add a picture to light table container, just use the pop-up menu with album
view and select the "Insert item to Light Table"
Limitation : the items cannot be yet removed from Light Table. digiKam do not
remember yet the items list in Light Table between session... and certainly
others stuff of course.
Please, try to be contructive. This is not yet time to request specific missing
features for Light Table. The implementation is in alpha stage...
Thansk in advance
Gilles
If you have access to a windows (or mac) machine, it would be great if you could download the trial version of adobe lightroom. (or at least download one of the video-tutorials for example from luminous-landscape.com [very complete, about 15 USD] or one of the short demonstration videos from adobe.com [free]) Digikam is definitively one of the best photo-management applications I've seen on linux, and I really love it... I would almost dare to say that feature-wise, it is not much behind lightroom: the two BIG features missing are the lighttable/compare mode, and the non-destructive image edits. So, again, Digikam is great. but the one thing in which Lightroom is years ahead is IMHO user-interface simplicity/consistency. in LR there is a thumbbar *all the time* at the bottom of the screen containing the current "folder/collection/filtered" images (folder "x", with tags "y" and rating "z") when you start in "library" mode, the thumbbar and the "preview/grid"-area contain the same thumbnails (as bar and grid, respectiv.) when you then double click on an image, it goes into preview mode, but the thumbbar stays at the bottom showing the current (maybe filtered)folder. you can then change images by clicking on the thumbbar. if you then select more than one image (hold CTL-key and select) they are shown side by side in the central area, with option to zoom in and to sync/link focus (position and zoom level). to "exit" compare-mode, you can click on the "grid" icon to return to grid, or deselect the images (leave only one selected) to return to "preview" mode. note that I don't mean to say that Digikam must copy or implement this or other features exactly like adobe, but I think they've put a great deal of time into getting the interface to be very "fluid" (powerful and yet simple/easy/quick), so maybe you want to look at it and eventually get some inspiration. best regards. luis Ad Gilles, #29, not yet reflecting the comments by Luis in #30 > Do not claim than this implentation do not work in any case: it's uncomplete > and not fully tested. For that it does work very well ;-) > I post this patch to have a first feedback, epecially to see if the way to have > the Light table embedded in Album Gui is the right way. > > I'm not fully satisfied by it (:=))). I think than light table must be a > separate tool like Image Editor... But i'm not sure... To me it does look like the right way - having another tool, in a separate window, would lead to a less coherent appearance, I think. Image selection (via the light table), and rating and tagging are quite closely related, so they should appear in the same framework (e.g. sometimes it is only possible by zooming into a picture to distinguish one type of duck from another; but zooming into a picture is already necessary to judge sharpness. So in a sense these two steps, selection and tagging, can be done in one go). Before going into the details, maybe it is worth to think about the possible workflow: a) Situation: several similar images Aim: select the best (according to whatever criterion) of them b) select the relevant images in the Album view and add them to the light-table thumbs c) all (or a subset?) of them will be displayed in the middle, as large as possible. Joint zooming and panning allows to see a magnified view of all selected images d) Select the best one: - kick out images from the light-table view or - rate images That's all. (or is anything missing?...;-) Of course there might be different ways to set up the workflow (so the opinion of users which have experience with other software is definitively helpful). Concerning c): I am not sure if the default should be to display just all thumbs placed in the lighttable (otherwise we would have another selection step)? It might be nice to be able to display the current picture just alone in the middle (i.e., as it is at the moment) and quickly switch back to the comparison view, where all are shown. (But presumably this is a minor detail at this point). For d) one could use an additional color label (eg. red, yellow, green, blue, and purple) as available in other applications . > Of course the tool do not provide yet the way to compare image. The light table > sidebar tab is just a container to group the image to compare. When you select > an idem, it appear on the center using preview mode. You can just pan/scroll... > > > To add a picture to light table container, just use the pop-up menu with album > view and select the "Insert item to Light Table" > > Limitation : the items cannot be yet removed from Light Table. digiKam do not > remember yet the items list in Light Table between session... and certainly > others stuff of course. > > Please, try to be contructive. This is not yet time to request specific missing > features for Light Table. The implementation is in alpha stage... There are of course a couple of *small* glitches (just let me know if you would like to have a list already at this point). To mention one point already now: I find the following a bit confusing: - Go to Album view in a folder with images - go to the light-table (empty or non empty, does not matter): now the images of the previous album folder are still displayed Changing to the light-table side-bar should just display the first (or later all) of its images in the middle. (After changing to one of the thumbs in the ligtht-table, this works as expected, so maybe it is just a simple initializatoin call missing when selecting the light-table view). Best, Arnd > This patch is an uncomplete approach of Light Table embedded in album > gui and using a sidebar tab on the left. > > Do not claim than this implentation do not work in any case: it's > uncomplete and not fully tested. It compiles and what was said works, it works. One major regression mentioned by Arnd: after playing with LT it is impossible to Preview images with context menu and click. Only F3 works. > I post this patch to have a first feedback, epecially to see if the way > to have the Light table embedded in Album Gui is the right way. Looks OK. Scaling works. > I'm not fully satisfied by it (:=))). I think than light table must be a > separate tool like Image Editor... But i'm not sure... If this is technically much easier for produce/maintaining/expanding OK. But already IE as separate window can confuse users. > > > To add a picture to light table container, just use the pop-up menu with > album view and select the "Insert item to Light Table" Not sure if it is "missing feature" or design: it is not possible to drag'n'drop to LT. To Mik, #32 : >It compiles and what was said works, it works. >One major regression mentioned by Arnd: after playing with LT it is >impossible to Preview images with context menu and click. Only F3 works. Yes, the implementation is not complete. Some control cases are missing. >Looks OK. Scaling works. >If this is technically much easier for produce/maintaining/expanding OK. >But already IE as separate window can confuse users. To maintain, it will more easy to do. This is why i'm more favorable to have a separate window for LT. Since multiple context are implemented in Album gui (album view, preview, welcome page, etc.), adding LT is not trivial as well. Marcel, i woukd to have your viewpoint about LT... >Not sure if it is "missing feature" or design: it is not possible to >drag'n'drop to LT. It not yet implemented (:=))) Gilles > Since multiple context are implemented in Album gui (album view,
> preview, welcome page, etc.), adding LT is not trivial as well.
What about adding it to IE?
>What about adding it to IE?
Yes, this is one other possibility...
Gilles
I am much more in favor of having it integrated (Reasons: see #31). Is there any other application out there which does something like this in a separate window? This is my main question... The LT implementation will continue depending of the responses/investiguations from others developpers/users. It's important... You know already my viewpoint (:=))) Gilles Concerning what is actually displayed in the center of the light-table: The 1:1 zoom, makes clear that the representation in the middle of the light-table is a reduced version of the original, i.e. a 3456 x 2304 image does almost fit on a 1024x768 screen. While something like this is maybe needed for performance reasons, a light-table has to display the unmodified image. Would be Frank's suggestion #16, in http://bugs.kde.org/show_bug.cgi?id=140131 a possible solution, also from the users perspective? How do other application deal with this problem in their light-tables? Obviously, if you compare several images they can't be at 100% zoom. The magnifying tool can be used to quickly compare details of images. Possibly there could be a parallel magnifier moving over the same spot in 2 images. The second comparison mode should be sequenced images. Let me explain. It is often difficult to compare side by side when it's a question of tonality for example. A mode that lets you sequence images without refreshing the screen (as ajax does in the browser) is the best mode for this. This mode is nicely implemented in the plugin widgets pointer mode, you move the mouse in and out of the image and the change is applied or not. > The LT implementation will continue depending of the > responses/investiguations from others developpers/users. It's > important... IMO - better is: better solution with more features in new, separate window than crippled implementation in existing window. The only issue I see is live manipulation of LT list from album view with LT in separate window. LT window could bring one nice feature (I cannot see how to do in current window constellation) - multiple LT windows and browsing through stacks of photos. > You know already my viewpoint (:=))) Yeah, I am just looking at my Thinking in C++ copy... Without much hope :( ---------------------------------------------------- Ka > Obviously, if you compare several images they can't be at 100% zoom. The > magnifying tool can be used to quickly compare details of images. > Possibly there could be a parallel magnifier moving over the same spot > in 2 images. As I understand images should be shown in some grid, each image with identical zoom factor and viewport. When changing zoom factor and viewport it should be done for all images at the same time. I think this is the simpliest method. But there should be way to turn off binding of images. Some checkbox like in Konqueror for chaining views. This would be required to compare: landscape and portrait images; various compositions. > The second comparison mode should be sequenced images. Let me explain. You mean like quick Alt-Tab between windows? That would be nice too. > this. This mode is nicely implemented in the plugin widgets pointer > mode, you move the mouse in and out of the image and the change is > applied or not. But limited only to two versions. ---------------------------------------------------- Ka ------- You are receiving this mail because: ------- > You are the assignee for the bug, or are watching the assignee. > > http://bugs.kde.org/show_bug.cgi?id=135048 > > > > > ------- Additional Comments From mikmach wp pl 2007-04-13 10:18 ------- > > > Obviously, if you compare several images they can't be at 100% zoom. The > > magnifying tool can be used to quickly compare details of images. > > Possibly there could be a parallel magnifier moving over the same spot > > in 2 images. > > As I understand images should be shown in some grid, each image with > identical zoom factor and viewport. When changing zoom factor and > viewport it should be done for all images at the same time. I think this > is the simpliest method. Agreed > But there should be way to turn off binding of images. Some checkbox > like in Konqueror for chaining views. This would be required to compare: > landscape and portrait images; various compositions. > > > The second comparison mode should be sequenced images. Let me explain. > > You mean like quick Alt-Tab between windows? That would be nice too. > > > this. This mode is nicely implemented in the plugin widgets pointer > > mode, you move the mouse in and out of the image and the change is > > applied or not. > > But limited only to two versions. > No, one could use the mousewheel in this mode to sift through a stack of images, very elegantly! Gerhard Created attachment 20326 [details]
patch to test new Thumbbar implementation depending of digiKam DB
This patch is a test implementation to use the new thumbbar witch use digiKam
DB.
This thumbbar will be used by future LT implementation.
Created attachment 20328 [details]
Thumbbar for LT using digiKam DB informations.
THis screenshot give a view of the new thumbbar for LT with tooltip in action
> This patch is a test implementation to use the new thumbbar witch use
> digiKam DB.
Looks nice but it miss arrow in the corner pointing to right image.
Dnia pi SVN commit 660737 by cgilles: digiKam from trunk : first implementation of digiKam Light Table tool. It not yet suitable as well because the tool do not provide yet a comparison method between 2 images. The Light Table is a pictures container witch can handle items from everywhere on Albums library. Just use the Album Gui pop-up menu to insert an item in Light Table. The Light table has a thumbar on the right. when you click on one item, it's displayed on central view, where you can process zooming and panning. http://digikam3rdparty.free.fr/Screenshots/lighttable_v2.png Gerhard, this implementation is in _alpha_ stage, and must be _disable_ for next 0.9.2-beta1 release. Paco and me we working on actually. To disable it before to release digiKam 0.9.2-beta1, please just comment the line 26 from digikam/albumiconview.cpp. Thanks in advance CCBUG: 135048 CCMAIL: digikam-devel@kde.org CCMAIL: francisco.jct@gmail.com CCMAIL: gerhard@kulzer.net M +76 -7 digikam/albumiconview.cpp M +8 -6 digikam/albumiconview.h M +18 -8 utilities/lighttable/Makefile.am AM utilities/lighttable/lighttableview.cpp [License: GPL] AM utilities/lighttable/lighttableview.h [License: GPL] AM utilities/lighttable/lighttablewindow.cpp [License: GPL] AM utilities/lighttable/lighttablewindow.h [License: GPL] A utilities/lighttable/lighttablewindowui.rc --- trunk/extragear/graphics/digikam/digikam/albumiconview.cpp #660736:660737 @@ -1,12 +1,13 @@ /* ============================================================ - * Authors: Renchi Raju <renchi@pooh.tam.uiuc.edu> - * Caulier Gilles - * Marcel Wiesweg <marcel.wiesweg@gmx.de> - * Date : 2002-16-10 + * Authors : Renchi Raju + * Caulier Gilles + * Marcel Wiesweg + * Date : 2002-16-10 * Description : album icon view * - * Copyright 2002-2005 by Renchi Raju by Gilles Caulier <caulier dot gilles at gmail dot com> - * Copyright 2006-2007 by Gilles Caulier <caulier dot gilles at gmail dot com> and Marcel Wiesweg + * Copyright 2002-2005 by Renchi Raju <renchi@pooh.tam.uiuc.edu> + * Copyright 2002-2007 by Gilles Caulier <caulier dot gilles at gmail dot com> + * Copyright 2006-2007 by Marcel Wiesweg <marcel.wiesweg@gmx.de> * * This program is free software; you can redistribute it * and/or modify it under the terms of the GNU General @@ -21,6 +22,9 @@ * * ============================================================ */ +// Uncomment this line to enable Light Table tool. +#define ENABLE_LIGHTTABLE 1 + #ifdef HAVE_CONFIG_H #include <config.h> #endif @@ -120,6 +124,7 @@ #include "albumiconitem.h" #include "albumicongroupitem.h" #include "loadingcacheinterface.h" +#include "lighttablewindow.h" #include "statusprogressbar.h" #include "metadatahub.h" #include "albumiconview.h" @@ -526,6 +531,10 @@ popmenu.insertItem(SmallIcon("editimage"), i18n("Edit..."), 10); popmenu.insertItem(i18n("Open With"), &openWithMenu, 11); +#ifdef ENABLE_LIGHTTABLE + popmenu.insertItem(SmallIcon("idea"), i18n("Insert to Light Table"), 19); +#endif + // Merge in the KIPI plugins actions ---------------------------- KIPI::PluginLoader* kipiPluginLoader = KIPI::PluginLoader::instance(); @@ -674,6 +683,12 @@ break; } + case 19: + { + slotInsertToLightTable(iconItem); + break; + } + default: break; } @@ -931,7 +946,7 @@ setCurrentItem(item); } -void AlbumIconView::slotDisplayItem(AlbumIconItem *item ) +void AlbumIconView::slotDisplayItem(AlbumIconItem *item) { if (!item) return; @@ -1015,6 +1030,60 @@ imview->setFocus(); } +void AlbumIconView::slotInsertToLightTable(AlbumIconItem *item) +{ + AlbumSettings *settings = AlbumSettings::instance(); + + if (!settings) return; + + QString imagefilter = settings->getImageFileFilter().lower() + + settings->getImageFileFilter().upper(); + + if (KDcrawIface::DcrawBinary::instance()->versionIsRight()) + { + // add raw files only if dcraw is available + imagefilter += settings->getRawFileFilter().lower() + + settings->getRawFileFilter().upper(); + } + + // Run Light Table with all selected image files in the current Album. + + ImageInfoList imageInfoList; + ImageInfo *currentImageInfo = 0; + + for (IconItem *it = firstItem() ; it ; it = it->nextItem()) + { + if ((*it).isSelected()) + { + AlbumIconItem *iconItem = static_cast<AlbumIconItem *>(it); + QString fileExtension = iconItem->imageInfo()->kurl().fileName().section( '.', -1 ); + + if ( imagefilter.find(fileExtension) != -1 ) + { + ImageInfo *info = new ImageInfo(*iconItem->imageInfo()); + info->setViewItem(0); + imageInfoList.append(info); + if (iconItem == item) + currentImageInfo = info; + } + } + } + + LightTableWindow *ltview = LightTableWindow::lightTableWindow(); + + ltview->disconnect(this); + + // TODO: Added slots connection here if necessary. + + ltview->loadImageInfos(imageInfoList, currentImageInfo); + + if (ltview->isHidden()) + ltview->show(); + + ltview->raise(); + ltview->setFocus(); +} + // ------------------------------------------------------------------------------ AlbumIconItem* AlbumIconView::firstSelectedItem() const --- trunk/extragear/graphics/digikam/digikam/albumiconview.h #660736:660737 @@ -1,12 +1,13 @@ /* ============================================================ - * Authors: Renchi Raju <renchi@pooh.tam.uiuc.edu> - * Caulier Gilles - * Marcel Wiesweg <marcel.wiesweg@gmx.de> - * Date : 2002-16-10 + * Authors : Renchi Raju + * Caulier Gilles + * Marcel Wiesweg + * Date : 2002-16-10 * Description : album icon view * - * Copyright 2002-2005 by Renchi Raju by Gilles Caulier <caulier dot gilles at gmail dot com> - * Copyright 2006-2007 by Gilles Caulier <caulier dot gilles at gmail dot com> and Marcel Wiesweg + * Copyright 2002-2005 by Renchi Raju <renchi@pooh.tam.uiuc.edu> + * Copyright 2002-2007 by Gilles Caulier <caulier dot gilles at gmail dot com> + * Copyright 2006-2007 by Marcel Wiesweg <marcel.wiesweg@gmx.de> * * This program is free software; you can redistribute it * and/or modify it under the terms of the GNU General @@ -132,6 +133,7 @@ void slotDeleteSelectedItems(bool deletePermanently = false); void slotDeleteSelectedItemsDirectly(bool useTrash); void slotDisplayItem(AlbumIconItem *item=0); + void slotInsertToLightTable(AlbumIconItem *item=0); void slotAlbumModified(); void slotSetAlbumThumbnail(AlbumIconItem *iconItem); void slotCopy(); --- trunk/extragear/graphics/digikam/utilities/lighttable/Makefile.am #660736:660737 @@ -1,17 +1,27 @@ METASOURCES = AUTO INCLUDES = -I$(top_srcdir)/digikam/digikam \ - -I$(top_srcdir)/digikam/libs/dimg \ - -I$(top_srcdir)/digikam/libs/thumbbar \ - -I$(top_srcdir)/digikam/libs/dmetadata \ - -I$(top_srcdir)/digikam/libs/themeengine \ - -I$(top_srcdir)/digikam/libs/threadimageio \ - $(all_includes) + -I$(top_srcdir)/digikam/libs/widgets/common \ + -I$(top_srcdir)/digikam/libs/dialogs \ + -I$(top_srcdir)/digikam/libs/thumbbar \ + -I$(top_srcdir)/digikam/libs/dimg \ + -I$(top_srcdir)/digikam/libs/themeengine \ + -I$(top_srcdir)/digikam/libs/dmetadata \ + -I$(top_srcdir)/digikam/libs/dimg/filters \ + -I$(top_srcdir)/digikam/libs/imageproperties \ + -I$(top_srcdir)/digikam/libs/threadimageio \ + -I$(top_srcdir)/digikam/utilities/setup \ + -I$(top_srcdir)/digikam/utilities/slideshow \ + -I$(top_srcdir)/digikam/utilities/imageeditor/canvas \ + -I$(top_srcdir)/digikam/utilities/imageeditor/tools \ + -I$(top_builddir)/digikam/libs/dialogs \ + $(LIBKEXIV2_CFLAGS) $(LIBKDCRAW_CFLAGS) $(all_includes) noinst_LTLIBRARIES = liblighttable.la -liblighttable_la_SOURCES = lighttablebar.cpp +liblighttable_la_SOURCES = lighttablebar.cpp lighttablewindow.cpp lighttableview.cpp liblighttable_la_LDFLAGS = $(all_libraries) $(KDE_RPATH) - +rcdir = $(kde_datadir)/digikam +rc_DATA = lighttablewindowui.rc ** trunk/extragear/graphics/digikam/utilities/lighttable/lighttableview.cpp #property svn:eol-style + native ** trunk/extragear/graphics/digikam/utilities/lighttable/lighttableview.h #property svn:eol-style + native ** trunk/extragear/graphics/digikam/utilities/lighttable/lighttablewindow.cpp #property svn:eol-style + native ** trunk/extragear/graphics/digikam/utilities/lighttable/lighttablewindow.h #property svn:eol-style + native To digiKam users: The Light Table implemented in svn is not yet suitable. We working on with Paco. Please to not post comments in this room if a functionnality do not work. all in not yet implemented. Also, i think this tool will not be enable in 0.9.2-fianl, excepted if we find more free time to finalize it. Considerate this tool in alpha stage. Gilles Caulier SVN commit 661014 by cgilles: digiKam from trunk : Light Table improvements. The new LT is now able to compare 2 images at the same time. Just insert some pictures to LT and set one on left panel and one other to right panel using the thumbbar context menu. On the bottom (status bar) there are 2 sliders to zoom independantly the right or the left panel. In a first time i have targeted to sync left and right panel but its complex to do it if size of left and right images are not the same. There is a screenshot of LT in action at this url : http://digikam3rdparty.free.fr/Screenshots/lighttable_v3.png The LT still under alpha stage. there are some part witch are not yet implemented/tested... CCBUG: 135048 CCMAIL: digikam-devel@kde.org CCMAIL: francisco.jct@gmail.com CCMAIL: gerhard@kulzer.net M +2 -1 Makefile.am AM lighttableview.cpp [License: GPL] AM lighttableview.h [License: GPL] M +125 -61 lighttablewindow.cpp M +4 -3 lighttablewindow.h --- trunk/extragear/graphics/digikam/utilities/lighttable/Makefile.am #661013:661014 @@ -19,7 +19,8 @@ noinst_LTLIBRARIES = liblighttable.la -liblighttable_la_SOURCES = lighttablebar.cpp lighttablewindow.cpp lighttablepreview.cpp +liblighttable_la_SOURCES = lighttablebar.cpp lighttablewindow.cpp lighttablepreview.cpp \ + lighttableview.cpp liblighttable_la_LDFLAGS = $(all_libraries) $(KDE_RPATH) ** trunk/extragear/graphics/digikam/utilities/lighttable/lighttableview.cpp #property svn:eol-style + native ** trunk/extragear/graphics/digikam/utilities/lighttable/lighttableview.h #property svn:eol-style + native --- trunk/extragear/graphics/digikam/utilities/lighttable/lighttablewindow.cpp #661013:661014 @@ -75,10 +75,12 @@ removeFullScreenButton = false; cancelSlideShow = false; accelerators = 0; + leftSidebar = 0; rightSidebar = 0; previewView = 0; barView = 0; - splitter = 0; + hSplitter = 0; + vSplitter = 0; fileDeleteAction = 0; slideShowAction = 0; fullScreenAction = 0; @@ -97,7 +99,8 @@ zoomMinusAction = 0; zoomTo100percents = 0; nameLabel = 0; - zoomBar = 0; + leftZoomBar = 0; + rightZoomBar = 0; } bool fullScreenHideToolBar; @@ -105,7 +108,8 @@ bool removeFullScreenButton; bool cancelSlideShow; - QSplitter *splitter; + QSplitter *hSplitter; + QSplitter *vSplitter; KAction *fileDeleteAction; KAction *slideShowAction; @@ -132,10 +136,12 @@ LightTableView *previewView; - StatusZoomBar *zoomBar; + StatusZoomBar *leftZoomBar; + StatusZoomBar *rightZoomBar; StatusProgressBar *nameLabel; + ImagePropertiesSideBarDB *leftSidebar; ImagePropertiesSideBarDB *rightSidebar; }; @@ -175,14 +181,20 @@ //------------------------------------------------------------- + d->leftSidebar->loadViewState(); d->rightSidebar->loadViewState(); + d->leftSidebar->populateTags(); d->rightSidebar->populateTags(); KConfig* config = kapp->config(); config->setGroup("LightTable Settings"); - if(config->hasKey("Splitter Sizes")) - d->splitter->setSizes(config->readIntListEntry("Splitter Sizes")); + if(config->hasKey("Vertical Splitter Sizes")) + d->vSplitter->setSizes(config->readIntListEntry("Vertical Splitter Sizes")); + + if(config->hasKey("Horizontal Splitter Sizes")) + d->hSplitter->setSizes(config->readIntListEntry("Horizontal Splitter Sizes")); + setAutoSaveSettings("LightTable Settings"); } @@ -201,7 +213,8 @@ KConfig* config = kapp->config(); config->setGroup("LightTable Settings"); - config->writeEntry("Splitter Sizes", d->splitter->sizes()); + config->writeEntry("Vertical Splitter Sizes", d->vSplitter->sizes()); + config->writeEntry("Horizontal Splitter Sizes", d->hSplitter->sizes()); config->sync(); e->accept(); @@ -209,61 +222,94 @@ void LightTableWindow::setupUserArea() { - QWidget* widget = new QWidget(this); - QHBoxLayout *lay = new QHBoxLayout(widget); - d->splitter = new QSplitter(widget); - d->barView = new LightTableBar(d->splitter, ThumbBarView::Vertical); - d->previewView = new LightTableView(d->splitter); - d->rightSidebar = new ImagePropertiesSideBarDB(widget, "LightTable Right Sidebar", d->splitter, - Sidebar::Right, true); - lay->addWidget(d->splitter); - lay->addWidget(d->rightSidebar); + QWidget* mainW = new QWidget(this); + d->hSplitter = new QSplitter(Qt::Horizontal, mainW); + QHBoxLayout *hlay = new QHBoxLayout(mainW); + d->leftSidebar = new ImagePropertiesSideBarDB(mainW, "LightTable Left Sidebar", d->hSplitter, + Sidebar::Left, true); - d->splitter->setFrameStyle( QFrame::NoFrame ); - d->splitter->setFrameShadow( QFrame::Plain ); - d->splitter->setFrameShape( QFrame::NoFrame ); - d->splitter->setOpaqueResize(false); - setCentralWidget(widget); + QWidget* centralW = new QWidget(d->hSplitter); + QVBoxLayout *vlay = new QVBoxLayout(centralW); + d->vSplitter = new QSplitter(Qt::Vertical, centralW); + d->barView = new LightTableBar(d->vSplitter, ThumbBarView::Horizontal); + d->previewView = new LightTableView(d->vSplitter); + vlay->addWidget(d->vSplitter); + + d->rightSidebar = new ImagePropertiesSideBarDB(mainW, "LightTable Right Sidebar", d->hSplitter, + Sidebar::Right, true); + + hlay->addWidget(d->leftSidebar); + hlay->addWidget(d->hSplitter); + hlay->addWidget(d->rightSidebar); + + d->hSplitter->setFrameStyle( QFrame::NoFrame ); + d->hSplitter->setFrameShadow( QFrame::Plain ); + d->hSplitter->setFrameShape( QFrame::NoFrame ); + d->hSplitter->setOpaqueResize(false); + d->vSplitter->setFrameStyle( QFrame::NoFrame ); + d->vSplitter->setFrameShadow( QFrame::Plain ); + d->vSplitter->setFrameShape( QFrame::NoFrame ); + d->vSplitter->setOpaqueResize(false); + + setCentralWidget(mainW); } void LightTableWindow::setupStatusBar() { + d->leftZoomBar = new StatusZoomBar(statusBar()); + statusBar()->addWidget(d->leftZoomBar, 1); + d->nameLabel = new StatusProgressBar(statusBar()); d->nameLabel->setAlignment(Qt::AlignCenter); d->nameLabel->setMaximumHeight(fontMetrics().height()+2); statusBar()->addWidget(d->nameLabel, 100); - d->zoomBar = new StatusZoomBar(statusBar()); - statusBar()->addWidget(d->zoomBar, 1, true); + d->rightZoomBar = new StatusZoomBar(statusBar()); + statusBar()->addWidget(d->rightZoomBar, 1); } void LightTableWindow::setupConnections() { - connect(d->barView, SIGNAL(signalLightTableBarItemSelected(ImageInfo*)), - this, SLOT(slotLightTableBarItemSelected(ImageInfo*))); + connect(d->barView, SIGNAL(setLeftPanelInfo(ImageInfo*)), + this, SLOT(slotSetLeftPanelInfo(ImageInfo*))); + connect(d->barView, SIGNAL(setRightPanelInfo(ImageInfo*)), + this, SLOT(slotSetRightPanelInfo(ImageInfo*))); + connect(d->nameLabel, SIGNAL(signalCancelButtonPressed()), this, SLOT(slotNameLabelCancelButtonPressed())); - ImageAttributesWatch *watch = ImageAttributesWatch::instance(); + connect(d->leftZoomBar, SIGNAL(signalZoomMinusClicked()), + d->previewView, SLOT(slotDecreaseLeftZoom())); - connect(watch, SIGNAL(signalFileMetadataChanged(const KURL &)), - this, SLOT(slotFileMetadataChanged(const KURL &))); + connect(d->leftZoomBar, SIGNAL(signalZoomPlusClicked()), + d->previewView, SLOT(slotIncreaseLeftZoom())); - connect(d->zoomBar, SIGNAL(signalZoomMinusClicked()), - d->previewView, SLOT(slotDecreaseZoom())); + connect(d->leftZoomBar, SIGNAL(signalZoomSliderChanged(int)), + d->previewView, SLOT(slotLeftZoomSliderChanged(int))); - connect(d->zoomBar, SIGNAL(signalZoomPlusClicked()), - d->previewView, SLOT(slotIncreaseZoom())); + connect(d->rightZoomBar, SIGNAL(signalZoomMinusClicked()), + d->previewView, SLOT(slotDecreaseRightZoom())); - connect(d->zoomBar, SIGNAL(signalZoomSliderChanged(int)), - this, SLOT(slotZoomSliderChanged(int))); + connect(d->rightZoomBar, SIGNAL(signalZoomPlusClicked()), + d->previewView, SLOT(slotIncreaseRightZoom())); - connect(d->previewView, SIGNAL(signalZoomFactorChanged(double)), - this, SLOT(slotZoomFactorChanged(double))); + connect(d->rightZoomBar, SIGNAL(signalZoomSliderChanged(int)), + d->previewView, SLOT(slotRightZoomSliderChanged(int))); + connect(d->previewView, SIGNAL(signalLeftZoomFactorChanged(double)), + this, SLOT(slotLeftZoomFactorChanged(double))); + + connect(d->previewView, SIGNAL(signalRightZoomFactorChanged(double)), + this, SLOT(slotRightZoomFactorChanged(double))); + connect(d->previewView, SIGNAL(signalSlideShow()), - this, SLOT(slotToggleSlideShow())); + this, SLOT(slotToggleSlideShow())); + + ImageAttributesWatch *watch = ImageAttributesWatch::instance(); + + connect(watch, SIGNAL(signalFileMetadataChanged(const KURL &)), + this, SLOT(slotFileMetadataChanged(const KURL &))); } void LightTableWindow::setupActions() @@ -373,13 +419,14 @@ void LightTableWindow::loadImageInfos(const ImageInfoList &list, ImageInfo *imageInfoCurrent) { - d->previewView->setImageInfo(imageInfoCurrent); - for (QPtrList<ImageInfo>::const_iterator it = list.begin(); it != list.end(); ++it) { - LightTableBarItem *item = new LightTableBarItem(d->barView, *it); - if (*it == imageInfoCurrent) - d->barView->setSelected(item); + if (!d->barView->findItemByInfo(*it)) + { + LightTableBarItem *item = new LightTableBarItem(d->barView, *it); + if (*it == imageInfoCurrent) + d->barView->setSelected(item); + } } // if window is iconified, show it @@ -387,17 +434,24 @@ { KWin::deIconifyWindow(winId()); } +} + +void LightTableWindow::slotSetLeftPanelInfo(ImageInfo* info) +{ + d->previewView->setLeftImageInfo(info); + d->leftSidebar->itemChanged(info); } -void LightTableWindow::slotLightTableBarItemSelected(ImageInfo* info) +void LightTableWindow::slotSetRightPanelInfo(ImageInfo* info) { - d->previewView->setImageInfo(info); + d->previewView->setRightImageInfo(info); d->rightSidebar->itemChanged(info); } void LightTableWindow::slotZoomTo100Percents() { - d->previewView->setZoomFactor(1.0); + d->previewView->setLeftZoomFactor(1.0); + d->previewView->setRightZoomFactor(1.0); } void LightTableWindow::slotFitToWindow() @@ -671,40 +725,50 @@ } } -void LightTableWindow::slotZoomFactorChanged(double zoom) +void LightTableWindow::slotLeftZoomFactorChanged(double zoom) { double h = (double)ThumbnailSize::Huge; double s = (double)ThumbnailSize::Small; - double zmin = d->previewView->zoomMin(); - double zmax = d->previewView->zoomMax(); + double zmin = d->previewView->leftZoomMin(); + double zmax = d->previewView->leftZoomMax(); double b = (zmin-(zmax*s/h))/(1-s/h); double a = (zmax-b)/h; int size = (int)((zoom - b) /a); - d->zoomBar->setZoomSliderValue(size); - d->zoomBar->setZoomTrackerText(i18n("zoom: %1%").arg((int)(zoom*100.0))); + d->leftZoomBar->setZoomSliderValue(size); + d->leftZoomBar->setZoomTrackerText(i18n("zoom: %1%").arg((int)(zoom*100.0))); - d->zoomBar->setEnableZoomPlus(true); - d->zoomBar->setEnableZoomMinus(true); + d->leftZoomBar->setEnableZoomPlus(true); + d->leftZoomBar->setEnableZoomMinus(true); - if (d->previewView->maxZoom()) - d->zoomBar->setEnableZoomPlus(false); + if (d->previewView->leftMaxZoom()) + d->leftZoomBar->setEnableZoomPlus(false); - if (d->previewView->minZoom()) - d->zoomBar->setEnableZoomMinus(false); + if (d->previewView->leftMinZoom()) + d->leftZoomBar->setEnableZoomMinus(false); } -void LightTableWindow::slotZoomSliderChanged(int size) +void LightTableWindow::slotRightZoomFactorChanged(double zoom) { double h = (double)ThumbnailSize::Huge; double s = (double)ThumbnailSize::Small; - double zmin = d->previewView->zoomMin(); - double zmax = d->previewView->zoomMax(); + double zmin = d->previewView->rightZoomMin(); + double zmax = d->previewView->rightZoomMax(); double b = (zmin-(zmax*s/h))/(1-s/h); double a = (zmax-b)/h; - double z = a*size+b; + int size = (int)((zoom - b) /a); - d->previewView->setZoomFactor(z); + d->rightZoomBar->setZoomSliderValue(size); + d->rightZoomBar->setZoomTrackerText(i18n("zoom: %1%").arg((int)(zoom*100.0))); + + d->rightZoomBar->setEnableZoomPlus(true); + d->rightZoomBar->setEnableZoomMinus(true); + + if (d->previewView->rightMaxZoom()) + d->rightZoomBar->setEnableZoomPlus(false); + + if (d->previewView->rightMinZoom()) + d->rightZoomBar->setEnableZoomMinus(false); } } // namespace Digikam --- trunk/extragear/graphics/digikam/utilities/lighttable/lighttablewindow.h #661013:661014 @@ -77,7 +77,8 @@ private slots: - void slotLightTableBarItemSelected(ImageInfo*); + void slotSetLeftPanelInfo(ImageInfo*); + void slotSetRightPanelInfo(ImageInfo*); void slotZoomTo100Percents(); void slotFitToWindow(); void slotNameLabelCancelButtonPressed(); @@ -90,8 +91,8 @@ void slotNewToolbarConfig(); void slotSetup(); void slotFileMetadataChanged(const KURL &); - void slotZoomSliderChanged(int); - void slotZoomFactorChanged(double); + void slotLeftZoomFactorChanged(double); + void slotRightZoomFactorChanged(double); private: > In a first time i have targeted to sync left and right panel but its
> complex to do it if size of left and right images are not the same.
I think you should give up when images aren't identical in terms of
size.
Hey, this looks close to useable! (Compile went fine and no crashes so far ;-) Some thoughts (feel free to ignore if they are premature; I know the light-table is alpha) - the light-table has to work with non-scaled images (i.e. like the image editor); otherwise a control of the quality is not possible. - joint zooming and joint panning is essential (I agree with Mikolaj that for images not idential in size this should just be disabled; maybe there is a way to deal with this, but this really looks like a rare situation) In addition, even for similar pictures, the subject of interest might not be at the same place. For this the possibility to create an additional shift (while still keeping the linked panning and zooming) would be helpful. This could be achieved by declaring the left image as master and the right one just follows any zoom and pan. If one pans in the right image, only this one is affected. If one then pans in the left one, the right one follows, as before, but with the additional shift (there might be some issues near the borders, but one thing after another ;-). - the whole process feels too complicated: a) select images b) add them to the light-table c) in the light-table: select image for the left view select image for the right view There is not much one can do about a) and b), apart from maybe providing a keyboard short-cut at some later stage. For c): what about displaying the first two images directly as left and right one? (maybe they should also be marked as selected ones, with different colors?) (Gilles, here should really stop reading, because the rest is even more like feature wishes...) - Maybe drag-and-drop from the thumbs would be helpful. - Then, to go through a sequence of similar images, a kind of "Next - two" comparison would speed up things considerably. Here the right image becomes the left one and the next thumb becomes the new right image. (The same for "Previus Two") What I am not sure about concerns the simultaneous comparison of more than two images (3, 4, ....)? Whether this is useful or not, presumably depends on the size of the screen. For a small 12'' laptop anything more than 2 might not work out, whereas on a large 20'' display much more is possible. OK, I will shut up now. Keep on this great work on the light-table - it looks extremely promising!!! Best, Arnd Arnd, I'm aware about all feedback, so i try to read all comments on B.K.O... But time missing and i'm not easy to follow all directions (:=))) Gilles Dnia sobota 05 maj 2007, Arnd Baecker napisaĆ: > - joint zooming and joint panning is essential > (I agree with Mikolaj that for images not idential in size > this should just be disabled; > maybe there is a way to deal with this, but this > really looks like a rare situation) I suppose Gilles tried to make proportional sync: moving of panning from top-left to bottom-right works always regardless of size of image. I think basic sync by pixel would be enough. > - Maybe drag-and-drop from the thumbs would be helpful. Would be extremely helpful. First time I opened LT I thought this is buggy... > What I am not sure about concerns the simultaneous comparison > of more than two images (3, 4, ....)? I think all images should be opened in compare part of LT. Only later they could be removed, re-added, etc. > Keep on this great work on the light-table - it > looks extremely promising!!! Agree :) SVN commit 662113 by cgilles: digikam from trunk : added Insert to Light Table action on album gui Image menu... Now the new Light Table tool is officially available on digiKam. BUG: 135048 M +0 -6 albumiconview.cpp M +11 -0 digikamapp.cpp M +2 -0 digikamappprivate.h M +1 -0 digikamui.rc M +8 -0 digikamview.cpp M +1 -0 digikamview.h --- trunk/extragear/graphics/digikam/digikam/albumiconview.cpp #662112:662113 @@ -23,9 +23,6 @@ * * ============================================================ */ -// Uncomment this line to enable Light Table tool. -#define ENABLE_LIGHTTABLE 1 - #ifdef HAVE_CONFIG_H #include <config.h> #endif @@ -531,10 +528,7 @@ popmenu.insertItem(SmallIcon("viewimage"), i18n("View..."), 18); popmenu.insertItem(SmallIcon("editimage"), i18n("Edit..."), 10); popmenu.insertItem(i18n("Open With"), &openWithMenu, 11); - -#ifdef ENABLE_LIGHTTABLE popmenu.insertItem(SmallIcon("idea"), i18n("Insert to Light Table"), 19); -#endif // Merge in the KIPI plugins actions ---------------------------- --- trunk/extragear/graphics/digikam/digikam/digikamapp.cpp #662112:662113 @@ -618,6 +618,15 @@ "image_edit"); d->imageViewAction->setWhatsThis(i18n("This will open the selected item in the image editor.")); + d->imageLightTableAction = new KAction(i18n("Insert to Light Table"), + "idea", + Key_F6, + d->view, + SLOT(slotImageLightTable()), + actionCollection(), + "image_lighttable"); + d->imageLightTableAction->setWhatsThis(i18n("This will insert the selected items to light table.")); + d->imageRenameAction = new KAction(i18n("Rename..."), "pencil", Key_F2, @@ -940,6 +949,7 @@ d->imageViewAction->setEnabled(false); d->imagePreviewAction->setEnabled(false); + d->imageLightTableAction->setEnabled(false); d->imageRenameAction->setEnabled(false); d->imageDeleteAction->setEnabled(false); d->imageExifOrientationActionMenu->setEnabled(false); @@ -1154,6 +1164,7 @@ bool val = selection.isEmpty() ? false : true; d->imageViewAction->setEnabled(val); d->imagePreviewAction->setEnabled(val); + d->imageLightTableAction->setEnabled(val); d->imageRenameAction->setEnabled(val); d->imageDeleteAction->setEnabled(val); d->imageExifOrientationActionMenu->setEnabled(val); --- trunk/extragear/graphics/digikam/digikam/digikamappprivate.h #662112:662113 @@ -87,6 +87,7 @@ editTagAction = 0; imagePreviewAction = 0; imageViewAction = 0; + imageLightTableAction = 0; imageSetExifOrientation1Action = 0; imageSetExifOrientation2Action = 0; imageSetExifOrientation3Action = 0; @@ -181,6 +182,7 @@ // Image Actions KToggleAction *imagePreviewAction; + KAction *imageLightTableAction; KAction *imageViewAction; KAction *imageSetExifOrientation1Action; KAction *imageSetExifOrientation2Action; --- trunk/extragear/graphics/digikam/digikam/digikamui.rc #662112:662113 @@ -42,6 +42,7 @@ <text>&Image</text> <Action name="image_view" /> <Action name="image_edit" /> + <Action name="image_lighttable" /> <Action name="image_set_exif_orientation"/> <Separator /> <ActionList name="image_actions"/> --- trunk/extragear/graphics/digikam/digikam/digikamview.cpp #662112:662113 @@ -1032,6 +1032,14 @@ d->iconView->slotSetExifOrientation(orientation); } +void DigikamView::slotImageLightTable() +{ + AlbumIconItem *item = d->iconView->firstSelectedItem(); + if (!item) return; + + d->iconView->slotInsertToLightTable(item); +} + void DigikamView::slotImageRename(AlbumIconItem *iconItem) { AlbumIconItem *item; --- trunk/extragear/graphics/digikam/digikam/digikamview.h #662112:662113 @@ -117,6 +117,7 @@ void slotNewAdvancedSearch(); // Image action slots + void slotImageLightTable(); void slotImagePreview(); void slotImageEdit(); void slotImageExifOrientation(int orientation); Hey guys, Today, i have fully implemented the Light Table Drag & Drop support. Excepted some improvements and polishing to do, especially in main menu, the Light Table is now ready to use. I will open a new component in B.K.O about. Please post your wishes and bug reports at the right place. Thanks in advance. Gilles Caulier |