!7 cmodule2 ExtraFrame { S mainModuleID; transient JComponent visualization; bool deleteOnMainReload; // delete when main module is reloaded bool deleteOnReboot; // delete when OS is rebooted bool usePreferredSizeInitially; int minimumSizePlusY = 100; // fix the god damn window-too-small bug? visual visualization; start { componentFieldsToKeep = litset("visualization"); if (deleteOnReboot && dm_isBooting()) dm_deleteModule(); // delete this module when main module is deleted dm_vmBus_onMessage_enter moduleDeleted(voidfunc(O mod) { if (dm_sameModule(mod, mainModuleID)) dm_deleteModule(); }); dm_vmBus_onMessage_enter moduleReloaded(voidfunc(O mod) { if (deleteOnMainReload && dm_sameModule(mod, mainModuleID)) dm_deleteModule(); }); // react to frame being disposed of by code dm_vmBus_onMessage_enter disposingInternalFrame(voidfunc(O frame) { if (frame == dm_frame(module())) dm_deleteModule(); }); } JComponent _getReloadData() { ret visualization; } void _setReloadData(JComponent data) { this.visualization = data; } bool _usePreferredSizeInitially() { ret usePreferredSizeInitially; } Pt minimumSize() { if (visualization == null) null; Dimension d = getMinimumSize(visualization); ret Pt(d.width, d.height+minimumSizePlusY); } }