0
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
| | import unohelper
IMPLE_NAME = "mytools.script.EventMacroExecutor"
from com.sun.star.lang import XServiceInfo
from com.sun.star.task import XJob
from com.sun.star.document import DocumentEvent
class EventMacroExecutor(unohelper.Base, XServiceInfo, XJob):
DOCUMENT_EVENTS = ("OnCreate",
"OnLoadFinished", "OnNew", "OnLoad",
"OnSave", "OnSaveAs", "OnSaveAsDone",
"OnPrepareunload", "OnFocus", "OnUnfocus",
"OnPrint", "OnModifyChanged",
"OnCopyTo", "OnCopyToDone",
"OnViewCreated", "OnPrepareViewClosing",
"OnVisAreaChanged", "OnCreate", "OnLoadFinished",
"OnSaveAsFailed", "OnSaveFailed", "OnCopyToFailed",
"TitleChanged", "OnMailMerge", "OnPageCountChange")
APPLICATION_EVENTS = ("OnStartApp", "OnCloseApp",
"OnUnload", "OnViewClosed")
def __init__(self, ctx, *args):
self.ctx = ctx
# XServiceInfo
def getImplementationName(self):
return IMPLE_NAME
def supportsService(self, name):
return name == IMPLE_NAME
def getSupportedServiceNames(self):
return IMPLE_NAME,
def check_context(self, doc, context):
if len(context) == 0:
return True
mod_manager = self.ctx.getServiceManager().createInstanceWithContext(
"com.sun.star.frame.ModuleManager", self.ctx)
identifier = mod_manager.identify(doc)
return identifier in context
# XJob
def execute(self, args):
""" Event executed. """
event_name = ""
doc = None
url = ""
context = []
for arg in args:
name = arg.Name
#print(name)
if name == "JobConfig": # Arguments
options = arg.Value
for option in options:
name = option.Name
if name == "URL":
url = option.Value
elif name == "Context":
context = option.Value.split(",")
elif name == "Environment":
envs = arg.Value
#print(envs)
for env in envs:
name = env.Name
if name == "EnvType" and env.Value == "DOCUMENTEVENT":
pass#print(env.Value)
elif name == "Model":
doc = env.Value
elif name == "EventName":
event_name = env.Value
#
valid = True
if event_name in self.DOCUMENT_EVENTS:
if not self.check_context(doc, context):
valid = False
else:
# elif event_name in self.APPLICATION_EVENTS:
doc = None
if valid:
# execute macro
sp = doc.getScriptProvider()
script = sp.getScript(url)
#if not script:
# print("no script")
ev = DocumentEvent(doc, event_name, None, None)
script.invoke((ev,), (), ())
g_ImplementationHelper = unohelper.ImplementationHelper()
g_ImplementationHelper.addImplementation(
EventMacroExecutor, IMPLE_NAME, (IMPLE_NAME,),)
|