Le 09/11/2014 04:17, Patrick Shanahan a écrit : > >> 'Start Again' is simply achieved by using the module reset button. >> 'Eliminate the Module entirely' by stepping back in the History list and then >> compressing the stack. > Yes, I really understand this but very time consuming, mouse clicking, > looking for modules and cancels everything you have done withing the > module rather than just the *last* change. > > tks,
Hello all, There is a little room for improvement here IMHO. The history stack is more powerful than a simple undo (and preserved across sessions, that's uncommon). Yet for use as an undo it's sometimes too coarse-grained because it creates a new history entry only on using different modules. ## The history stack Patrick, I read that you don't want to remember and manually apply/unapply settings back and forth. One can notice that the history stack feels very much like an undo stack: it remembers the past, allows to walk towards past and back to present, but if you step in between and change something, the top of the stack up to the present is forgotten. There could be a technically simple solution that is very similar to what actually happens in the undo of many programs: create an item in history stack whenever anything is changed in any module. Trouble is: recording every little change will bloat the stack a lot, making it irrelevant. So there may exist a solution that could hint the stack to remember relevant changes, so that the history remains lean and useful, and the user can easily undo/redo at a suitable granularity. ## A quick experiment Before diving into code, may I suggest to try a trick we can try without changing any code. It can be a step towards a future improvement: * Suppose you are working on module A and you like to record a state, to be able to undo it. * The temporary trick is there: just enable or disable another module that by default does nothing and that *currently* does nothing. There are many, it's just a hack at this point: "channel mixer", "color contrast", "color correction", "tone curve", "zone system", "levels", "contrast brightness saturation", even "exposure". Doing that will create another entry in the history stack. * Now you can try other settings for module A. They will be recorded into a new history entry. * You can undo/redo your changes in module A by clicking in the history stack in the last entries labelled with name of module A. * You can extend that to any number of changes in module A. ## Experiment cost and benefit All in all, the trick costs *one click* on the "enable/disable" button of any of the modules named above. It works because it triggers the creation of a history entry. We know the small cost, is there benefit ? If the trick offers no benefit, then I have not understood your need, can you refine ? If this trick offers a benefit, it is unnatural, there may be simple changes to do in code. ## How to implement * in history panel, add a toggle button. That button could be labelled "Keep this state" or something better. It would mean to the code "on next operation, when trying to figure out if we need to create a new history entry, just create a new history entry, like if next operation was on a module different from the last". Button state would be reset after performing operation. * map some keystrokes to "keep this state", "move to previous history entry", "move to next history entry". ## New state Then user workflow would be: * work until you have something interesting * press ctrl-"keep this state" * make adjustments to another variant * press ctrl-"move to previous history entry", and ctrl-"move to next history entry" to walk back and forth. * continue if needed with several variants, or just select one and compress the stack. All in all, something quick and easy, that feels like an undo, without bloat to the history stack. What do you think ? Sincerely, -- Stéphane Gourichon ------------------------------------------------------------------------------ _______________________________________________ Darktable-users mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/darktable-users
