Author Topic: Collapse/Expand version stacks inside a normal stack  (Read 1980 times)

sinus

  • Global Moderator
  • *****
  • Posts: 4489
  • IMatch-User since 2001 (IMatch 3.6)
Collapse/Expand version stacks inside a normal stack
« on: February 03, 2016, 09:48:23 AM »
Hey all,
I work with stacks. They are great.
Now, if in a normal stack are versions stacks, they can be collapsed or expanded.

If the stack is big and holds also a lot of versions stacks, it is a bit tedious, always expand or collapse these version stacks inside the stack.
Because we must expand the normal stack, select all image in the stack, then toggle the versions stacks, and finally collapse the stack again.

This can do a script for us. Simply click on an image in a stack, not important, if the stack is collapsed or not, it will collapse the normal stack.
And it will collapse or expand the version stacks inside the stack, depending on the state.


Sounds complicated, but is not. Simply click on an image, let the script run.
If the result is not desired, simply click again.
Does not harm the images.

BUT: I am sure, the script could be done much better.
I did it with sendkeys and to make it run, I had to add some wait-commands.
A wait.2 for example did not work, the now choosen wait.5 works here and works on my laptop.

Hence it seems, that this value is important. But maybe there is a much easier and more sophisticated possibility thinkable, but I am not able to do so.
But this script here works.  :D

Feel free to use it or create a better one.  ;D

Code: [Select]
Option Explicit
'**************************************************
'* Scriptversuch von Markus J. Hässig
'* - Verändert nichts an den Bildern -
'* - Wirkt auf normale Stacks und innerhalb dieses Stacks auf Version-Stacks -
'****
'* 1. Selektiere ein Bild eines Stacks
'* 2. Lass das script laufen
'* 3. Egal, ob der (normale) Stack offen oder zu ist, er wird geschlossen (collapsed)
'* 4. Wenn die Versions stacks innerhalb des Stacks zu (collapsed) sind, dann werden diese geöffnet (expanded)
'* 5. Wenn die Versions stacks innerhalb des Stacks offen (expanded) sind, werden sie geschlossen (collapsed)
'****
'* Heisst also, man kann dieses script gefahrlos auf einen Stack anwenden, auch mehrmals, wenn gewünscht (um Version stacks zu öffnen/schliessen)
'**************************************************

Sub Main
Debug.Clear
Dim img As File
Dim ThisStack As IMStack
Dim msg As String

Dim fw As FileWindow
Set fw = Application.GetFileWindow(imfwtCurrent)
Set img = Application.GetFileWindow(imfwtCurrent).FocusedFile

fw.SetFocus ' This is required so SendKeys will work.

If img Is Nothing Then
MsgBox (" Hey Mann, Du solltest ein Bild selektieren!")
Exit Sub
End If

'******* now the mainpart starts
Set ThisStack = img.Stack
'******* if a stack is expanded, collapse it, if it is collapsed,expand it
'******* UNTEN Hier ist der stack expanded und wird nun collapsed

If ThisStack.Expanded = True Then
ThisStack.Expanded = False
'******* OBEN Hier ist der stack expanded und wird nun collapsed

'******* UNTEN Hier ist der stack collapsed und wird nun expanded
Else
ThisStack.Expanded = True

' dieses wait ist wichtig, zb mit .2 funktioniert es nicht, mit .4 schon, deshalb habe ich .5 genommen
  Wait .5
SendKeys "^+a"
fw.FocusFile(img) ' Make sure the image has the focus

' dieses wait ist wichtig, zb mit .2 funktioniert es nicht, mit .4 schon, deshalb habe ich .5 genommen
  Wait .5
' (Ctrl Shift q, sollte alle versionen toggeln)
SendKeys "^+{q}"
ThisStack.Expanded = False
End If
'******* OBEN Hier ist der stack collapsed und wird nun expanded


'******* the important, final stuff to do (clear all)
Set ThisStack = Nothing
Set img = Nothing
Set fw = Nothing

End Sub



Best wishes from Switzerland! :-)
Markus