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

Reply via email to