Skip to content

Commit 37c7e32

Browse files
committed
Update python generator for registerering event handlers.
1 parent 092a065 commit 37c7e32

File tree

2 files changed

+35
-14
lines changed

2 files changed

+35
-14
lines changed

src/blocks/mrc_event_handler.ts

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ import { createFieldFlydown } from '../fields/field_flydown';
2929
import { createFieldNonEditableText } from '../fields/FieldNonEditableText';
3030
import { MRC_STYLE_EVENT_HANDLER } from '../themes/styles';
3131
import * as toolboxItems from '../toolbox/items';
32+
import * as storageModule from '../storage/module';
3233
import * as storageModuleContent from '../storage/module_content';
3334

3435
export const BLOCK_NAME = 'mrc_event_handler';
@@ -359,11 +360,37 @@ export function pythonFromBlock(
359360
code = generator.scrub_(block, code);
360361

361362
generator.addClassMethodDefinition(funcName, code);
362-
generator.addEventHandler(sender, eventName, funcName);
363+
generateRegisterEventHandler(block, generator, sender, eventName, funcName);
363364

364365
return '';
365366
}
366367

368+
function generateRegisterEventHandler(
369+
block: EventHandlerBlock,
370+
generator: ExtendedPythonGenerator,
371+
sender: string,
372+
eventName: string,
373+
funcName: string) {
374+
// Create the line of code that will register this event handler.
375+
let fullSender = '';
376+
if (block.mrcSenderType === SenderType.ROBOT) {
377+
fullSender = 'self.' + sender;
378+
} else if (block.mrcSenderType === SenderType.MECHANISM) {
379+
switch (generator.getModuleType()) {
380+
case storageModule.MODULE_TYPE_ROBOT:
381+
fullSender = 'self.' + sender;
382+
break;
383+
case storageModule.MODULE_TYPE_OPMODE:
384+
fullSender = 'self.robot.' + sender;
385+
break;
386+
}
387+
}
388+
if (fullSender) {
389+
generator.addRegisterEventHandlerStatement(
390+
fullSender + '.register_event_handler("' + eventName + '", self.' + funcName + ')\n');
391+
}
392+
}
393+
367394
// Functions used for creating blocks for the toolbox.
368395

369396
export function addRobotEventHandlerBlocks(

src/editor/extended_python_generator.ts

Lines changed: 7 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -79,8 +79,7 @@ export class ExtendedPythonGenerator extends PythonGenerator {
7979
private hasAnyEventHandlers = false;
8080

8181
private classMethods: {[key: string]: string} = Object.create(null);
82-
// For eventHandlers, the keys are the function name.
83-
private eventHandlers: {[key: string]: {sender: string, eventName: string}} = Object.create(null);
82+
private registerEventHandlerStatements: string[] = [];
8483
// Opmode details
8584
private details : OpModeDetails | null = null;
8685

@@ -180,11 +179,8 @@ export class ExtendedPythonGenerator extends PythonGenerator {
180179
this.classMethods[methodName] = code;
181180
}
182181

183-
addEventHandler(sender: string, eventName: string, funcName: string): void {
184-
this.eventHandlers[funcName] = {
185-
'sender': sender,
186-
'eventName': eventName
187-
}
182+
addRegisterEventHandlerStatement(registerEventHandlerStatement: string): void {
183+
this.registerEventHandlerStatements.push(registerEventHandlerStatement);
188184
}
189185

190186
getComponentPortParameters(): string[] {
@@ -214,12 +210,10 @@ export class ExtendedPythonGenerator extends PythonGenerator {
214210
const classDef = 'class ' + className + '(' + simpleBaseClassName + '):\n';
215211
const classMethods = [];
216212

217-
if (this.eventHandlers && Object.keys(this.eventHandlers).length > 0) {
213+
if (this.registerEventHandlerStatements && this.registerEventHandlerStatements.length > 0) {
218214
let code = 'def register_event_handlers(self):\n';
219-
for (const funcName in this.eventHandlers) {
220-
const event = this.eventHandlers[funcName];
221-
code += this.INDENT + 'self.' + event.sender + '.register_event_handler("' +
222-
event.eventName + '", self.' + funcName + ')\n';
215+
for (const registerEventHandlerStatement of this.registerEventHandlerStatements) {
216+
code += this.INDENT + registerEventHandlerStatement;
223217
}
224218
classMethods.push(code);
225219
}
@@ -233,8 +227,8 @@ export class ExtendedPythonGenerator extends PythonGenerator {
233227
}
234228
classMethods.push(this.classMethods[name])
235229
}
236-
this.eventHandlers = Object.create(null);
237230
this.classMethods = Object.create(null);
231+
this.registerEventHandlerStatements = [];
238232
this.componentPorts = Object.create(null);
239233
code = classDef + this.prefixLines(classMethods.join('\n\n'), this.INDENT);
240234
if (decorations){

0 commit comments

Comments
 (0)