This script will safely undo all the layout changes we have been discussing 
recently.  It will work for most layouts that include zero, one, or both of 
VR and VR3. It does not solve the general problem.  One of many reasons for 
that is that any Qt GUI widgets that may have been added by a user script 
or plugin won't have a standard way to tear them down and unhook them from 
Leo's event system.  For any special case a savvy user may be able to 
figure out how to do it but that won't work in general. These widgets also 
won't have a general way to discover the object names that are needed.

The script returns to the original Leo default layout with the Tree and Log 
frame on the left and the Body Editor on the right.  It works with Leo 
6.8.1 and the devel branch but I don't know if it will work for earlier Leo 
versions.

Note that the way I import the VR module is a bit indirect.  I could just 
have used a regular import but this way is a template for a more general 
future script where the object types may not be known ahead of time.

import importlib
from leo.core.leoQt import Orientation

gui = g.app.gui

MAIN_SPLITTER_ORIENTATION = Orientation.Horizontal
SECONDARY_SPLITTER_ORIENTATION = Orientation.Vertical

ms = gui.find_widget_by_name(c, 'main_splitter')
ss = gui.find_widget_by_name(c, 'secondary_splitter')
edf = gui.find_widget_by_name(c, 'bodyFrame')
lf = gui.find_widget_by_name(c, 'logFrame')
vr3 = gui.find_widget_by_name(c, 'viewrendered3_pane')
vr = gui.find_widget_by_name(c, 'viewrendered_pane')

edf_parent = edf.parent()
lf_parent = lf.parent()

delete_laters = set({})
if vr3:
    c.doCommandByName('vr3-hide')

if vr:
    v = importlib.import_module(vr.__module__)
    vr.hide()
    vr.closeEvent({})
    vr.deleteLater()
    h = c.hash()
    del v.controllers[h]

ms.setOrientation(MAIN_SPLITTER_ORIENTATION)
ss.setOrientation(SECONDARY_SPLITTER_ORIENTATION)

if edf_parent != ms:
    ms.insertWidget(2, edf)
    edf.show()
    if edf_parent != ss:
        delete_laters.add(edf_parent)

if lf_parent != ss:
    ss.insertWidget(2, lf)
    lf.show()
    if lf_parent != ms:
        delete_laters.add(lf.parent)

for w in delete_laters:
    w.deleteLater()

ms.setSizes([100_000] * len(ms.sizes()))
ss.setSizes([100_000] * len(ss.sizes()))

-- 
You received this message because you are subscribed to the Google Groups 
"leo-editor" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to leo-editor+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/leo-editor/a92bba1b-3469-469b-9b62-0ca51279826fn%40googlegroups.com.

Reply via email to