16 capabilities() -> "pluginid:service"
22 getConfigurationComponent(plugin)
23 capabilities() -> "pluginid:config"
28 OpenRocketSimulationListener extends SimulationListener implements Service, SwingConfigurator:
38 capabilities: pluginid:service, pluginid:config
40 getConfigurationComponent(plugin)
41 plugin.getConfigurationComponent()
43 abstract getConfigurationComponent()
54 - Config component -> dialog window (or button)
55 - stateful, non-dynamic
60 - Name + menu position -> Add extension menu
61 - Config component -> dialog after edit button
62 - stateful, (dynamic?)
67 - contains its own name, description, related object
76 - stateful, (dynamic?)
81 - name + menu position -> Menu
82 - stateful, non-dynamic
88 - Config component -> tab contents ????
89 - or a separate configuration interface?
94 Name is common - out, instead have name separately in plugin interfaces?
95 Menu position used twice - out
97 Leave common configuration out
98 -> :config supported by those that make sense
99 -> may have separate interface from SwingConfigurator (e.g. SwingMotorConfigurator)
102 -> :loader separately? for injecting placeholders
103 or store data and call loaders later
108 <extension pluginid="com.example.MyFancyExtension">
109 <param type="double" key="altitude">100.0</param>
110 <param type="material" key="mat">
113 <density>16000</density>
118 <extension pluginid="com.example.MyFancyExtension">
119 <param type="double" key="altitude">100.0</param>
120 <param type="material" key="mat">
123 <density>16000</density>
128 <extension pluginid="com.example.MyFancyExtension">
132 <extension pluginid="com.example.MyFancyExtension">