#
# Window creation example
#
# 	This example creates a minimal "control" that just fills in its
# 	window with red.  To make your own control, subclass Control and
# 	write your own OnPaint() method.  See PyCWnd.HookMessage for what
# 	the parameters to OnPaint are.
#

from pywin.mfc import dialog, window
import win32ui
import win32con
import win32api


class Control(window.Wnd):
    """Generic control class"""

    def __init__(self):
        window.Wnd.__init__(self, win32ui.CreateWnd())

    def OnPaint(self):
        dc, paintStruct = self.BeginPaint()
        self.DoPaint(dc)
        self.EndPaint(paintStruct)

    def DoPaint(self, dc):  # Override this!
        pass


class RedBox(Control):
    def DoPaint(self, dc):
        dc.FillSolidRect(self.GetClientRect(), win32api.RGB(255, 0, 0))


class RedBoxWithPie(RedBox):
    def DoPaint(self, dc):
        RedBox.DoPaint(self, dc)
        r = self.GetClientRect()
        dc.Pie(r[0], r[1], r[2], r[3], 0, 0, r[2], r[3] // 2)


def MakeDlgTemplate():
    style = (
        win32con.DS_MODALFRAME
        | win32con.WS_POPUP
        | win32con.WS_VISIBLE
        | win32con.WS_CAPTION
        | win32con.WS_SYSMENU
        | win32con.DS_SETFONT
    )
    cs = win32con.WS_CHILD | win32con.WS_VISIBLE

    w = 64
    h = 64

    dlg = [
        ["Red box", (0, 0, w, h), style, None, (8, "MS Sans Serif")],
    ]

    s = win32con.WS_TABSTOP | cs

    dlg.append(
        [
            128,
            "Cancel",
            win32con.IDCANCEL,
            (7, h - 18, 50, 14),
            s | win32con.BS_PUSHBUTTON,
        ]
    )

    return dlg


class TestDialog(dialog.Dialog):
    def OnInitDialog(self):
        rc = dialog.Dialog.OnInitDialog(self)
        self.redbox = RedBox()
        self.redbox.CreateWindow(
            None,
            "RedBox",
            win32con.WS_CHILD | win32con.WS_VISIBLE,
            (5, 5, 90, 68),
            self,
            1003,
        )
        return rc


class TestPieDialog(dialog.Dialog):
    def OnInitDialog(self):
        rc = dialog.Dialog.OnInitDialog(self)
        self.control = RedBoxWithPie()
        self.control.CreateWindow(
            None,
            "RedBox with Pie",
            win32con.WS_CHILD | win32con.WS_VISIBLE,
            (5, 5, 90, 68),
            self,
            1003,
        )


def demo(modal=0):
    d = TestPieDialog(MakeDlgTemplate())
    if modal:
        d.DoModal()
    else:
        d.CreateWindow()


if __name__ == "__main__":
    demo(1)
