File size: 4,089 Bytes
d12bc25
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
# document and view classes for MFC.
import win32ui

from . import object, window


class View(window.Wnd):
    def __init__(self, initobj):
        window.Wnd.__init__(self, initobj)

    def OnInitialUpdate(self):
        pass


# Simple control based views.
class CtrlView(View):
    def __init__(self, doc, wndclass, style=0):
        View.__init__(self, win32ui.CreateCtrlView(doc, wndclass, style))


class EditView(CtrlView):
    def __init__(self, doc):
        View.__init__(self, win32ui.CreateEditView(doc))


class RichEditView(CtrlView):
    def __init__(self, doc):
        View.__init__(self, win32ui.CreateRichEditView(doc))


class ListView(CtrlView):
    def __init__(self, doc):
        View.__init__(self, win32ui.CreateListView(doc))


class TreeView(CtrlView):
    def __init__(self, doc):
        View.__init__(self, win32ui.CreateTreeView(doc))


# Other more advanced views.
class ScrollView(View):
    def __init__(self, doc):
        View.__init__(self, win32ui.CreateView(doc))


class FormView(View):
    def __init__(self, doc, id):
        View.__init__(self, win32ui.CreateFormView(doc, id))


class Document(object.CmdTarget):
    def __init__(self, template, docobj=None):
        if docobj is None:
            docobj = template.DoCreateDoc()
        object.CmdTarget.__init__(self, docobj)


class RichEditDoc(object.CmdTarget):
    def __init__(self, template):
        object.CmdTarget.__init__(self, template.DoCreateRichEditDoc())


class CreateContext:
    "A transient base class used as a CreateContext"

    def __init__(self, template, doc=None):
        self.template = template
        self.doc = doc

    def __del__(self):
        self.close()

    def close(self):
        self.doc = None
        self.template = None


class DocTemplate(object.CmdTarget):
    def __init__(
        self, resourceId=None, MakeDocument=None, MakeFrame=None, MakeView=None
    ):
        if resourceId is None:
            resourceId = win32ui.IDR_PYTHONTYPE
        object.CmdTarget.__init__(self, self._CreateDocTemplate(resourceId))
        self.MakeDocument = MakeDocument
        self.MakeFrame = MakeFrame
        self.MakeView = MakeView
        self._SetupSharedMenu_()

    def _SetupSharedMenu_(self):
        pass  # to be overridden by each "app"

    def _CreateDocTemplate(self, resourceId):
        return win32ui.CreateDocTemplate(resourceId)

    def __del__(self):
        object.CmdTarget.__del__(self)

    def CreateCreateContext(self, doc=None):
        return CreateContext(self, doc)

    def CreateNewFrame(self, doc):
        makeFrame = self.MakeFrame
        if makeFrame is None:
            makeFrame = window.MDIChildWnd
        wnd = makeFrame()
        context = self.CreateCreateContext(doc)
        wnd.LoadFrame(
            self.GetResourceID(), -1, None, context
        )  # triggers OnCreateClient...
        return wnd

    def CreateNewDocument(self):
        makeDocument = self.MakeDocument
        if makeDocument is None:
            makeDocument = Document
        return makeDocument(self)

    def CreateView(self, frame, context):
        makeView = self.MakeView
        if makeView is None:
            makeView = EditView
        view = makeView(context.doc)
        view.CreateWindow(frame)


class RichEditDocTemplate(DocTemplate):
    def __init__(
        self, resourceId=None, MakeDocument=None, MakeFrame=None, MakeView=None
    ):
        if MakeView is None:
            MakeView = RichEditView
        if MakeDocument is None:
            MakeDocument = RichEditDoc
        DocTemplate.__init__(self, resourceId, MakeDocument, MakeFrame, MakeView)

    def _CreateDocTemplate(self, resourceId):
        return win32ui.CreateRichEditDocTemplate(resourceId)


def t():
    class FormTemplate(DocTemplate):
        def CreateView(self, frame, context):
            makeView = self.MakeView
            # 			view = FormView(context.doc, win32ui.IDD_PROPDEMO1)
            view = ListView(context.doc)
            view.CreateWindow(frame)

    t = FormTemplate()
    return t.OpenDocumentFile(None)