# -*- coding: utf-8 -*-
"""gui_api tutorial 4: show captures of the 3D and 2D windows inside a tool window.

ExportThumbnail3D / ExportThumbnail2D save what the windows show right now; AddImage displays a file
and SetWidgetValue swaps it for a new one.
"""
import os
import tempfile

import export_api
import gui_api

if not gui_api.IsGuiAvailable():
    raise SystemExit("gui_api needs the CLO window (it is not available in headless mode)")

gui_api.CloseAllWindows()

PATH_3D = os.path.join(tempfile.gettempdir(), "gui_api_capture_3d.png").replace(os.sep, "/")
PATH_2D = os.path.join(tempfile.gettempdir(), "gui_api_capture_2d.png").replace(os.sep, "/")

window = gui_api.CreateToolWindow("View Capture", 760, 520)
caption = gui_api.AddLabel(window, "press a button to capture")
images = gui_api.AddRow(window)
group_3d = gui_api.AddGroup(images, "3D window")
group_2d = gui_api.AddGroup(images, "2D window")
shown = {}


def show(key, group, path):
    if not path:
        gui_api.SetWidgetText(caption, "%s capture failed" % key)
        return
    if key in shown:
        gui_api.SetWidgetValue(shown[key], path)  # replace the picture in place
    else:
        shown[key] = gui_api.AddImage(group, path, 340, 380)
    gui_api.SetWidgetText(caption, "%s window captured" % key)


buttons = gui_api.AddRow(window)
gui_api.AddButton(buttons, "Capture 3D", lambda: show("3D", group_3d, export_api.ExportThumbnail3D(PATH_3D)))
gui_api.AddButton(buttons, "Capture 2D", lambda: show("2D", group_2d, export_api.ExportThumbnail2D(PATH_2D)))
gui_api.AddButton(buttons, "Close", lambda: gui_api.CloseWindow(window))

gui_api.ShowWindow(window)
